¿Es seguro para comparar dos valores de `` Integer` con == `en Java?

oggioniw:

Tengo este código Java:

public class Foo {
    public static void main(String[] args) {
         Integer x = 5;
         Integer y = 5;
         System.out.println(x == y);
    }
}

¿Está garantizado para imprimir trueen la consola? Es decir, es que comparando los dos enteros en caja por valor (que es lo que tengo que hacer) o por la identidad de referencia?

Además, va a ser diferente si yo los echo a enteros sin caja como esta

public class Foo {
    public static void main(String[] args) {
         Integer x = 5;
         Integer y = 5;
         System.out.println((int) x == (int) y);
    }
}
Charles Dowbecki:

No, no es la forma correcta de comparar los Integerobjetos. Debe utilizar Integer.equals()o Integer.compareTo()método.

Por defecto JVM almacenar en caché los Integervalores de [-128, 127] rango (ver java.lang.Integer.IntegerCache.highpropiedad ), pero otros valores no se almacenan en caché:

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

Unboxing a into llamando Integer.intValue()creará una intprimitiva que puede ser comparado con seguridad con el ==operador. Sin embargo unboxing un nullproducirá NullPointerException.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=172024&siteId=1
Recomendado
Clasificación