Autoboxing은 기본 타입(int, double 등)을 해당 객체(Integer, Double 등)로 자동 변환하는 것입니다. Unboxing은 래퍼 객체를 다시 기본 타입으로 변환하는 것입니다.
할당, 메서드 인자 및 컬렉션에서 자동으로 작동합니다:
List<Integer> numbers = new ArrayList<>(); numbers.add(5); // Autoboxing 예: 5 (int) -> Integer(5) int value = numbers.get(0); // Unboxing: Integer(5) -> 5
위험:
다음 코드가 예외를 발생시킬 수 있나요? 왜 그런가요?
Integer x = null; int y = x;
답변: 코드가 NullPointerException을 발생시키는데, 이는 int y = x;를 수행하려 할 때 null에서 기본 타입으로 unboxing을 시도하기 때문이며, null을 int로 변환할 수 없습니다.
이야기
int를 사용했어야 했습니다.이야기
Integer를 사용했으며, -128...127 값은 캐시되지만 나머지는 그렇지 않은 점을 고려하지 않았습니다. 이로 인해 ==가 갑자기 잘못된 결과를 반환하여 캐시에서 데이터의 잘못된 삭제가 발생했습니다.이야기
REST API에서 nullable 값이 들어왔습니다. 수신된 Integer의 단순 unboxing이 종종 고객의 숫자 대신 예상치 못한 null로 인해 충돌을 일으켰습니다.