J'ai ce code Java:
public class Foo {
public static void main(String[] args) {
Integer x = 5;
Integer y = 5;
System.out.println(x == y);
}
}
Est - il garanti d'imprimer true
sur la console? Je veux dire, est - il comparait les deux entiers en boîte de valeur (qui est ce que je dois faire) ou par l' identité de référence?
En outre, ce sera différent si je les jetai aux entiers sans emballage comme celui-ci
public class Foo {
public static void main(String[] args) {
Integer x = 5;
Integer y = 5;
System.out.println((int) x == (int) y);
}
}
Non, ce n'est pas la bonne façon de comparer les Integer
objets. Vous devez utiliser Integer.equals()
ou Integer.compareTo()
méthode.
Par défaut JVM mettre en cache les Integer
valeurs de [-128, 127] plage (voir la java.lang.Integer.IntegerCache.high
propriété ) , mais d' autres valeurs ne seront pas mises en cache:
Integer x = 5000;
Integer y = 5000;
System.out.println(x == y); // false
Unboxing à int
ou en appelant Integer.intValue()
va créer une int
primitive qui peut être en toute sécurité par rapport à l' ==
opérateur. Cependant unboxing un null
entraînera NullPointerException
.