
queue1은 모든 유형의 오브젝트를 보유할 수 있는 큐입니다.
queue2는 문자열 유형 객체만 보유할 수 있는 대기열입니다.
1) 1번과 2번의 차이점
queue1은 10이라는 int 객체를 포함합니다. 그러나 queue1은 객체 유형 객체를 포함하는 대기열이므로
int 유형인 10은 object 유형으로 “박싱”됩니다.
참조 값은 스택 메모리에 저장되고 10은 해당 주소의 힙 메모리에 저장됩니다.
queue2에는 “10”이라는 문자열 개체가 포함되어 있습니다. queue2는 문자열 객체를 포함하는 대기열이므로
문자열 “10”은 힙 메모리에 저장됩니다. 그러나 이것은 “복싱”이 아닙니다.
복싱은 값 유형을 참조 유형으로 변환하기 때문입니다.
참조 유형에 참조 유형을 포함했기 때문에 이것은 boxing이 아닙니다.
2) 3번과 4번의 차이점
queue1에 포함된 개체를 검색합니다. 힙 메모리에 저장된 10개를 꺼내 결과에 저장한다.
이 프로세스는 참조 유형이 값 유형으로 변환되는 “언박싱”입니다.
이때 result는 값 타입이고 var는 10의 타입을 결정하여 스택 메모리에 int 타입으로 저장한다.
다음으로 queue2에 포함된 개체를 검색합니다. 힙 메모리에 저장되어 있는 “10”을 꺼내 결과에 넣는다.
이때 result는 참조 타입이고 var는 “10”의 타입을 결정하여 문자열 타입으로 힙 메모리에 저장한다.
그러나 이것은 언박싱이 아닙니다. 참조 유형이 참조 유형이 되었기 때문입니다.