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 true
en 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);
}
}
No, no es la forma correcta de comparar los Integer
objetos. Debe utilizar Integer.equals()
o Integer.compareTo()
método.
Por defecto JVM almacenar en caché los Integer
valores de [-128, 127] rango (ver java.lang.Integer.IntegerCache.high
propiedad ), pero otros valores no se almacenan en caché:
Integer x = 5000;
Integer y = 5000;
System.out.println(x == y); // false
Unboxing a int
o llamando Integer.intValue()
creará una int
primitiva que puede ser comparado con seguridad con el ==
operador. Sin embargo unboxing un null
producirá NullPointerException
.