2012-12-04 2 views

답변

11

Autoboxingprimitive 유형을 적절한 wrapper 개체로 자동 변환합니다. 그 이유는 컬렉션에 프리미티브를 넣을 수 없기 때문입니다. Java 5이 나오기 전에이 작업을 직접 수행해야했지만 이제는 자동으로 처리됩니다. 그것은 자바 auto-boxing라고 http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html

2

:

은 자세한 내용은 여기 링크를 참조하십시오.

Java 프로그래머는 누구나 알고 있듯이 int (또는 다른 기본 값)를 콜렉션에 넣을 수 없습니다. 컬렉션은 객체 참조 만 가질 수 있으므로 기본 값을 적절한 래퍼 클래스에 저장해야합니다 (int의 경우 Integer 임). 컬렉션에서 객체를 가져올 때, 당신은 당신이 넣은 Integer를 얻는다; int가 필요한 경우 intValue 메소드를 사용하여 Integer를 unbox해야합니다. 이 복싱과 언 박싱은 모두 고통이며 코드를 혼란스럽게합니다. autoboxing 및 unboxing 기능은 프로세스를 자동화하여 통증과 혼란을 없애줍니다.

Link

1

ArrayList를 할 수만 저장소 개체. int는 기본 데이터 유형이므로 해당 객체에 대해 "자동 박스"됩니다. 이것은 Java 5의 경우에만 발생합니다. 그 전에 Integer를 직접 박스에 넣어야했습니다.

1

컬렉션은 원시 객체가 아닌 객체 만 보유 할 수 있으므로 자동 보 고서가 발생합니다. int 프리미티브가 필요한 경우이를 읽을 때 intValue() 메서드를 사용하여 unbox해야합니다.

0

이것은 Java 1.5에서 도입 된 Java 언어 기능입니다. 그것은 오토 박싱입니다.

대략적으로 말하자면, 자바 원시 타입을 해당 래퍼 클래스 유형으로 변환합니다. 컴파일러는 inboxing (primitive-to-wrapper) 또는 outboxing (wrapper-to-primitive)이 필요할 때 (가능한 경우) 감지하고 표현식을 올바른 바이트 코드로 확장합니다.

그래서 뒤에서 을 추가하면 Integer의 인스턴스가 목록에 추가됩니다.

0

더 잘 이해하려면 참조 유형 및 값 유형을 자세히 읽어보십시오.

ArrayList는 객체에 대한 참조 만 보유합니다. 가치 그 자체를 보유하지는 않습니다.

int는 값 유형이므로 참조가 없습니다. int를 Integer로 변환하면 메모리에 int 값을 보유하는 Integer 객체와 생성 한 Integer 객체에 대한 참조 공간을 만듭니다.

이제 ArrayList는 단순히 정수 자체를 유지하는 대신 Integer 객체에 주소를 저장합니다.

다음과 같이 생각하십시오. ArrayList의 한 요소가 메모리 블록 : 200을 차지합니다. 정수 개체가 메모리 블록에 있습니다 : 400. 메모리 블록 200에서 정수 값을 유지하는 대신 메모리 주소를 400으로 유지합니다.

이유, 잘 모르겠습니다. 나는 그들이 단순하게 유지하기 위해 이런 방식으로하기로 결정했다고 생각한다.

관련 문제