이 글의 내용은 자바의 자동 박싱과 자동 언박싱이 무엇인지 간략하게 이야기 해보려는 것입니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
자동 언박싱 및 자동 박싱
Java는 각 기본 데이터 유형에 해당하는 래퍼 유형을 제공합니다. 예:
public class TestMain { public static void main(String[] args) { Integer i = 10; } }
이 과정에서 해당 값에 따라 해당 Integer 개체가 자동으로 생성됩니다. 이것이 자동 박싱입니다. 다른 코드를 보세요:
public class TestMain { public static void main(String[] args) { Integer integer = 10; int i = integer; } }
자동 박싱과 자동 언박싱의 원리도 아주 간단합니다. 명령줄 프로그램을 통해 CLASSPATH(즉, bin 디렉터리의 .class 파일이 있는 경로)를 입력하고 javap로 디컴파일한 후 생성된 바이트코드를 확인합니다.
디컴파일된 콘텐츠가 많아서 우리는 오직 다음에만 집중합니다. 핵심 부분:
public static void main(java.lang.String[]); flags: ACC_PUBLIC, ACC_STATIC Code: stack=1, locals=3, args_size=1 0: iconst_1 1: invokestatic #16 // Method java/lang/Integer.valueO f:(I)Ljava/lang/Integer; 4: astore_1 5: aload_1 6: invokevirtual #22 // Method java/lang/Integer.intVal ue:()I 9: istore_2 10: return
autoboxing 중에 Java 가상 머신이 자동 unboxing 중에 , Java 가상 머신이 Integer의 intValue 메소드를 자동으로 호출하는지 확인하세요. . 이것이 자동 개봉 및 자동 포장 원칙입니다. 널 포인터 예외에 주의하세요
다음과 같은 코드가 있습니다:
public static void main(String[] args) throws Exception { Object obj = getObj(null); int i = (Integer)obj; } public static Object getObj(Object obj) { return obj; }
Little Trap
두 개의 코드를 살펴보세요. 첫 번째 코드는
public class TestMain { public static void main(String[] args) { Integer i1 = 100; Integer i2 = 100; Integer i3 = 200; Integer i4 = 200; System.out.println(i1 == i2); System.out.println(i3 == i4); } }
true false
public class TestMain { public static void main(String[] args) { Double d1 = 100.0; Double d2 = 100.0; Double d3 = 200.0; Double d4 = 200.0; System.out.println(d1 == d2); System.out.println(d3 == d4); } }
false false
public static Integer valueOf(int i) { final int offset = 128; if (i >= -128 && i <= 127) { // must cache return IntegerCache.cache[i + offset]; } return new Integer(i); }
Java 비디오 튜토리얼
,Java 개발 그래픽 튜토리얼, bootstrap 비디오 튜토리얼을 방문하세요!
위 내용은 자바의 자동 박싱(automatic boxing)과 자동 언박싱(automatic unboxing)이 무엇인지 간략하게 설명해주세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!