Eu tenho esse código Java:
public class Foo {
public static void main(String[] args) {
Integer x = 5;
Integer y = 5;
System.out.println(x == y);
}
}
É garantido para imprimir true
no console? Quero dizer, é que comparando os dois inteiros embalados por valor (que é o que eu preciso fazer) ou por identidade de referência?
Além disso, ele vai ser diferente se eu lançá-los em inteiros desembalados como este
public class Foo {
public static void main(String[] args) {
Integer x = 5;
Integer y = 5;
System.out.println((int) x == (int) y);
}
}
Não, não é o caminho certo para comparar os Integer
objetos. Você deve usar Integer.equals()
ou Integer.compareTo()
método.
Por padrão JVM irá armazenar em cache os Integer
valores de [-128, 127] intervalo (ver java.lang.Integer.IntegerCache.high
propriedade ), mas outros valores não serão armazenados em cache:
Integer x = 5000;
Integer y = 5000;
System.out.println(x == y); // false
Unboxing para int
ou chamar Integer.intValue()
criará um int
primitivo que pode ser comparado com segurança com ==
operador. No entanto unboxing uma null
resultará em NullPointerException
.