int i =1, j = 10;
System.out.println(i++); // 1
System.out.println(++j); // 11
System.out.println(i); // 2
System.out.println(j); // 11
형변환 연산자는 피연산자의 값을 읽어서 지정된 타입으로 형변환하고, 그 결과를 반환할 뿐이다.
그래서 피연산자의 값은 형변환 후에도 아무런 변화가 없다
double d = 84.1;
int i = (int)d;
System.out.println(i); // 84
System.out.println(d); // 84.1
기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환된다.
그러나 변수가 저장할 수 있는 값의 범위보다 더 큰 값을 저장하려는 경우에 형변환을 생략하면 에러가 발생한다.
byte b = 1000; // error (byte의 범위는 -128~127)
byte b2 = (byte)1000; // error는 발생하지 않지만, 범위를 넘어가 값손실 발생 > -24저장
이항 연산자는 두 피연산자의 타입이 일치해야 연산이 가능하다.
연산 전에 피연산자 타입의 일치를 위해 자동 형변환 되는 것을 '산술 변환'이라고 한다.
ex) long + int > long + long > long
byte + short > int + int > int
char + short > int + int > int
규칙1. 피연산자의 값손실을 최소화 할 것 > 보다 큰 타입으로 일치
규칙2. int보다 작은 타입은 int로 변환
byte a = 10;
byte b = 20;
byte c = a * b;
위와 같이 작성한 경우 에러가 발생한다.
byte는 int보다 작기 때문에 산술 변환에 의해 ab는 intint가 되어 int값을 반환한다.
하지만 c는 byte타입이기 때문에 형변환이 필요하다.
byte c = (byte)(a*b);
위와 같이 바꾸면 에러는 발생하지 않지만 값손실이 발생하여 다른 결과값을 받는다.
result = (x>y) ? x : y; // x가 y보다 크면 result = x ,아니면 y