Java

[Java] 오토박싱, 언박싱

펭귄코기 2022. 10. 6. 16:20

JDK1.5 이전에는 기본형과 참조형 간의 연산이 불가능 했기 때문에

 

래퍼 클래스로 기본형를 객체로 만들어서 연산해야 했다

 

그러나 지금은 기본형과 참조형간의 덧셈이 가능하다

 

이건 자바 언어의 규칙이 바뀐것이 아니라

 

컴파일러가 자동으로 변환하는 코드를 넣어주기 때문이다

 

컴파일 전 코드

int a = 3;
Integer aObject = new Integer(5);

int sum = a + aObject;

 

컴파일 후 코드

int a = 3;
Integer aObject = new Integer(5);

int sum = a + aObject.intValue();

 

이 외에도 내부적으로 객체 배열을 가지고 있는 Vector 클래스나 ArrayList 클래스에

 

기본형 값을 저장해야할 때나 형변환이 필요할 때도 컴파일러가 자동으로 코드를 추가해 준다

 

기본형 값을 래퍼 클래스의 객체로 자동 변환해주는 것을 오토박싱(autoboxing) 이라 하고

 

반대로 변환하는 것을 언박싱(unboxing) 이라 한다

 

ArrayList<Integer> list = new ArrayList<Integer>();

list.add(10);			// 오토박싱 10 -> new Integer(10)

int value = list.get(0);	// 언박싱 new Integer(10) -> 10

 

ArrayList에 숫자를 저장하거나 꺼낼때

 

기본형 값을 래퍼 클래스의 객체로 변환하지 않아도 된다