Der Inhalt dieses Artikels besteht darin, kurz darüber zu sprechen, was Javas automatisches Boxen und automatisches Unboxing ist. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.
Auto-Unboxing und Auto-Boxing
Java stellt für jeden Basisdatentyp entsprechende Wrapper-Typen bereit. Beispiel:
public class TestMain { public static void main(String[] args) { Integer i = 10; } }
In diesem Prozess wird das entsprechende Integer-Objekt automatisch basierend auf dem Wert erstellt. Dies ist automatisches Boxen . Schauen Sie sich einen anderen Code an:
public class TestMain { public static void main(String[] args) { Integer integer = 10; int i = integer; } }
automatisch in Basistypen entsprechend dem Wrapper-Typ konvertiert, was dem automatischen Unboxing entspricht.
Das Prinzip des automatischen Ein- und Auspackens ist ebenfalls sehr einfach. Geben Sie über das Befehlszeilenprogramm CLASSPATH ein (d. h. den Pfad, in dem sich die .class-Datei im bin-Verzeichnis befindet), dekompilieren Sie mit Javap und überprüfen Sie den generierten Bytecode: Es gibt viele dekompilierte Inhalte. Wir konzentrieren uns nur auf die wichtigsten Punkte. Teil: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
automatisch eingerahmt wird , die Java Virtual Machine automatisch die valueOf-Methode aufruft von Integer; während des automatischen Unboxings Wenn , die Java Virtual Machine automatisch die intValue-Methode von Integer aufruft. Das ist das Prinzip von Auto-Unboxing und Auto-Boxing.
Vorsicht vor Nullzeiger-Ausnahme
Es gibt so einen Code:public static void main(String[] args) throws Exception { Object obj = getObj(null); int i = (Integer)obj; } public static Object getObj(Object obj) { return obj; }
Kleine Falle
Sehen Sie sich zwei Codeteile an: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-Video-Tutorial, Java-Entwicklungsgrafik-Tutorial, Bootstrap-Video-Tutorial!
Das obige ist der detaillierte Inhalt vonEine kurze Diskussion darüber, was Javas automatisches Boxen und automatisches Unboxing ist.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!