2020. 5. 4. 11:16ㆍJava/Basic
long to int in Java
- intValue() 를 이용한 cast
1-1) Long to int (using intValue)
1-2) Nullsafe Long to int (using intValue)
1-3) long to int (using intValue)
1-4) intValue 이용시 발생되는 overflow 이슈 - Math.toIntExtrac()를 이용한 cast
1. intValue() 를 이용한 cast
1-1) Long to int (using intValue)
Long l1 = 11L; int i1 = l1.intValue(); System.out.println(l1 +", " +i1);
11, 11
Wrapper 클래스 Long의 intValue() 를 이용하여 int타입으로 형변환할 수 있습니다.
1-2) Nullsafe Long to int (using intValue)
Long l2 = null; int i2 = Long.valueOf(Optional.ofNullable(l2).orElse(0L)).intValue(); System.out.println(l2 +", " +i2);
null, 0
Long 타입의 경우 null 이 들어있는 경우도 존재합니다.
null을 intValue()를 이용하여 cast를 시도할 경우 NullPointerException을 발생시키기 때문에, 값이 null일 경우에 대한 예외 처리를 추가해야 합니다.
Optional.ofNullable을 이용하여 null이 들어있을 경우
0L
으로 바꿔서 Nullsafe하게 만들었습니다.
1-3) long to int (using intValue)
long l3 = 12L; int i3 = Long.valueOf(l3).intValue(); System.out.println(l3 +", " +i3);
12, 12
primitive long 타입의 경우, intValue() 메서드를 이용할 수 없습니다.
이럴 경우, Long.valueOf() 를 이용하여 Long instance로 변환하여 cast합니다.
1-4) intValue 이용시 발생되는 overflow 이슈
int타입의 범위는 -2147483648
~ 2147483647
로, 범위 내의 수를 cast할 시 정상적으로 출력됩니다.
long l4 = 2147483649L; int i4 = Long.valueOf(l4).intValue(); System.out.println(l4 +", " +i4);
2147483649, -2147483647
그러나, 위와같이 int타입의 표현 범위를 초과할 시엔(overflow), -범위
로 넘어가 원하지 않는 결과가 출력됩니다.
overflow에 안전한 cast를 제공하기 위해, overflow될 경우 익셉션을 던지도록 합시다.
Math 클래스의 toIntExtrac 메서드를 이용하면 overflow에 안전한 cast를 할 수 있습니다.
2. Math.toIntExtrac()를 이용한 cast
long타입을 int타입으로 cast할 때, int의 표현범위를 초과할 시 ArithmeticException
익셉션을 발생시키는 Math.toIntExact를 알아봅시다.
※ Java 8 이상 버전에서 지원합니다.
long l5 = 2147483649L; int i5 = Math.toIntExact(l5); System.out.println(l5 +", " +i5);
Exception in thread "main" java.lang.ArithmeticException: integer overflow at java.lang.Math.toIntExact(Unknown Source) at me.jiniworld.demo.test.Test.main(Test.java:6)
int로 표현할수 있는 범위를 초과한 값을 cast하려고 할 경우 위와 같은 에러를 던집니다.
또한, 인자값으로 변환대상을 받기 때문에 Wrapper Long타입이나 primitive long타입 모두 입력값으로 받을 수 있습니다.
'Java > Basic' 카테고리의 다른 글
[JDK 9] Immutable Collection 생성하기 (0) | 2022.05.06 |
---|---|
[Java] Gson을 이용한 Json Serialization & Deserialization (2) | 2022.04.29 |
[Java] String.format 을 이용한 문자열 형식 설정하기 (2) | 2020.04.02 |
Spring - 비동기(Ajax) 통신하기 (0) | 2019.10.31 |
[Java 8] try-with-resource 구조로 Http 데이터 송수신하기 (0) | 2019.09.30 |