Le contenu de cet article est de parler brièvement de ce qu'est la boxe et le déballage automatiques de Java ? Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.
Déballage automatique et boxing automatique
Java fournit des types de wrapper correspondants pour chaque type de données de base. Par exemple :
public class TestMain { public static void main(String[] args) { Integer i = 10; } }
Dans ce processus, l'objet Integer correspondant sera automatiquement créé en fonction de la valeur Il s'agit d'une boxe automatique . Regardez un autre morceau de code :
public class TestMain { public static void main(String[] args) { Integer integer = 10; int i = integer; } }
automatiquement converties en types de base en fonction du type de wrapper, qui est le déballage automatique.
Quant au principe de l'encaissage automatique et du déballage automatique, il est également très simple. Via le programme de ligne de commande, entrez CLASSPATH (c'est-à-dire le chemin où se trouve le fichier .class dans le répertoire bin), décompilez avec javap et vérifiez le bytecode généré : Il y a beaucoup de contenu décompilé, nous nous concentrons uniquement sur les points clés Partie :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
est automatiquement mis en boîte, , La machine virtuelle Java appelle automatiquement le méthode valueOf de Integer ; en automatique Lors du déballage , la machine virtuelle Java appelle automatiquement la méthode intValue de Integer . C'est le principe du auto-unboxing et auto-boxing.
Attention aux exceptions de pointeur nul
Il existe un tel morceau de 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; }
Petit piège
Regardez les deux morceaux de code. Le premier morceau de code est :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); }
Tutoriel vidéo Java, le Tutoriel graphique de développement Java, le Tutoriel vidéo bootstrap !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!