034 long을 int로 변환
long 값을 int 값으로 변환하기는 쉬워 보인다. 아래처럼 캐스팅을 사용하면 된다.
long nr = Integer.MAX_VALUE;
int intNrCast = (int) nr;
혹은 다음과 같이 Long.intValue()를 활용하는 방법도 있다.
int intNrValue = Long.valueOf(nrLong).intValue();
두 방식 모두 잘 동작한다. 이번에는 long 값이 다음과 같다고 가정하자.
long nrMaxLong = Long.MAX_VALUE;
이렇게 하면 위 두 방식 모두 -1을 반환한다. 올바른 결과를 얻으려면 JDK 8의 Math.toIntExact()를 사용하는 것이 좋다. 이 메서드는 long 타입의 인자를 받아 int로 변환한다. 받은 값이 int를 초과하면 ArithmeticException을 던진다.
// ArithmeticException을 던진다
int intNrMaxExact = Math.toIntExact(nrMaxLong);
toIntExact()는 내부적으로 ((int)value != value)라는 조건을 사용한다.