Java의 자동 박싱 및 언박싱: 심층 분석
JDK 5.0에 도입된 이후 자동 박싱 및 언박싱은 편리한 기능이 되었습니다. 자바에서. 그러나 이러한 프로세스의 기본 메커니즘을 이해하려고 하면 혼란이 발생합니다.
Auto Boxing
이전에는 Auto Boxing이 래퍼에 구현된 생성자에만 의존한다고 믿었습니다. 수업. 그러나 바이트코드를 조사해 보면 다른 이야기가 드러납니다.
int를 정수로 박싱하는 경우:
Integer n = 42;
컴파일러는 다음을 생성합니다.
bipush 42 invokestatic java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
이는 다음을 보여줍니다. valueOf() 메서드가 생성자 대신 사용됩니다. 이 디자인 선택은 캐싱을 활성화하고 박싱 중에 불필요한 개체 생성을 방지합니다.
자동 언박싱
마찬가지로 언박싱에는 생성자가 직접 관여하지 않습니다. 예를 들어 정수를 int로 unboxing하려면:
int n = Integer.valueOf(42);
등가 바이트 코드는 다음과 같습니다.
bipush 42 invokestatic java/lang/Integer.valueOf:(I)Ljava/lang/Integer; invokevirtual java/lang/Integer.intValue:()I
여기에서 intValue() 메서드는 래퍼 개체에서 기본 값을 검색합니다.
결론
Java의 Auto boxing과 unboxing은 각각 valueOf() 및 *Value() 메소드를 통해 구현됩니다. 이러한 방법을 사용하면 래퍼 클래스와 기본 유형 간의 효율적인 변환이 가능해 개발자가 의존하는 편의성과 유연성을 얻을 수 있습니다.
위 내용은 Auto Boxing 및 Unboxing은 Java에서 실제로 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!