Est-il sûr de comparer deux valeurs `` Integer` avec == `en Java?

oggioniw:

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 truesur 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);
    }
}
Charles Dowbecki:

Non, ce n'est pas la bonne façon de comparer les Integerobjets. Vous devez utiliser Integer.equals()ou Integer.compareTo()méthode.

Par défaut JVM mettre en cache les Integervaleurs de [-128, 127] plage (voir la java.lang.Integer.IntegerCache.highpropriété ) , mais d' autres valeurs ne seront pas mises en cache:

Integer x = 5000;
Integer y = 5000;
System.out.println(x == y); // false

Unboxing à intou en appelant Integer.intValue()va créer une intprimitive qui peut être en toute sécurité par rapport à l' ==opérateur. Cependant unboxing un nullentraînera NullPointerException.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=172020&siteId=1
conseillé
Classement