Question 1 :
public static void demo01() {
Integer f1 = 100, f2 = 100, f3 = 200, f4 = 200;
System.out.println(f1 == f2);
System.out.println(f3 == f4);
}
Question 2 :
private static Integer i;
public static void demo02() {
if (i == 0) {
System.out.println("A");
} else {
System.out.println("B");
}
}
Réponse à la question 1 :
vrai
faux
Réponse à la question 2 :
NullPointerException
Analyse :
Question 1 :
Voici le code source de "autoboxing" dans la classe Integer :
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
La valeur d'IntegerCache.low est de -128 et la valeur d'IntegerCache.high est de 127. En d'autres termes, lorsque Integer est automatiquement mis en boîte, si la plage de la valeur entière est jugée comprise entre [-128,127], la valeur dans le pool de constantes entières sera utilisée directement si elle n'est pas dans cette plage, un nouvel Entier ; () sera créé. Par conséquent, f1 et f2 dans cette question sont tous deux compris entre [-128,127] et utilisent la même valeur dans le pool constant. Cependant, f3 et f4 ne sont pas dans la plage de [-128,127] et leurs valeurs sont toutes deux nouvelles, donc f3 et f4 ne sont pas le même objet.
Question 2 :
La valeur par défaut de Integer i est nulle. Lorsque i==0 est exécuté, le côté droit du signe égal est un nombre, donc pour effectuer des opérations de comparaison, Integer sera automatiquement déballé (c'est-à-dire qu'Integer sera converti en type int). Évidemment, si vous déballez null (convertissez null en nombre), une NullPointerException sera signalée.
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!