É seguro para comparar dois valores `Integer` com` `== em Java?

oggioniw:

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

Não, não é o caminho certo para comparar os Integerobjetos. Você deve usar Integer.equals()ou Integer.compareTo()método.

Por padrão JVM irá armazenar em cache os Integervalores de [-128, 127] intervalo (ver java.lang.Integer.IntegerCache.highpropriedade ), mas outros valores não serão armazenados em cache:

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

Unboxing para intou chamar Integer.intValue()criará um intprimitivo que pode ser comparado com segurança com ==operador. No entanto unboxing uma nullresultará em NullPointerException.

Acho que você gosta

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