- 예제(1)
(이 예제를 보면, 당연히 제대로 된 값이 나와야 된다.)
(그러나 마이너스 값이 나오게 되었다. 그러한 이유는 int * int = int가 나오기 때문이다.)
(즉, int는 2x10^9까지만 저장이 되지만, 위의 결과 값은 오버플로우가 되어버린다.)
(그래서 우리는 a나 b 앞에 L이나 (long)을 명시적으로 적어줘야 한다.)
- 예제(2)
(이 예제는 연산 순서에 의미가 있다.)
(즉, 먼저 연산하는 곱하기 또는 나누기에 따라 int 범위에 넘어가는지 안 넘어가는지 체크를 해야한다.)
- 예제(3)
(이 예제에서는 char도 연산을 수행할 때, 정수형 값이 나오게 된다.)
(대신 b-a를 통해 char를 얻을려면 형변환을 명시적으로 해주어야 한다.)
(또한 아래의 예제(4)의 변수 c2 또는 c3처럼 해도 된다.)
- 예제(4) - 중요 ✔✔✔✔✔
( c2에서는 컴파일이 잘 되지만 c4에서는 컴파일 에러가 나온다. )
( 그 이유는 바로 'a' + 1은 리터럴 간의 연산이기 때문이다. )
( 즉, 컴파일러는 이 연산을 "미리 계산" 하여 상수로 저장하기 때문에 이 c2에서의 덧셈은 수행하지 않는다. )
( 그래서 형변환 명시 에러가 없었던 것이다. )
( 그러나, c4는 다르다. )
( 그 이유는 바로 c1변수를 사용한 연산은 리터럴 연산이 아니므로 미리 계산할 수 없다. )
- 예제(5)
( 두 변수의 값이 다른 이유는 반올림 유무 때문이다. )
( 즉, shortpi1은 float -> int로 변환되기 때문에 반올림 되지 않는다. )
( 그러나 shortpi2는 Math.round() 함수가 직접적으로 반올림을 해주기 때문에 가능하다. )