É garantido que o novo inteiro (i) == i em Java?
Considere o seguinte trecho:
int i = 99999999;
byte b = 99;
short s = 9999;
Integer ii = Integer.valueOf(9); // should be within cache
System.out.println(new Integer(i) == i); // "true"
System.out.println(new Integer(b) == b); // "true"
System.out.println(new Integer(s) == s); // "true"
System.out.println(new Integer(ii) == ii); // "false"
É óbvio por que a última linhaSEMPRE impressões"false"
: estamos usando==
comparação de identidade de referência e umanew
objeto seráNUNCA estar==
para um objeto já existente.
A questão é sobre as três primeiras linhas: são essas comparaçõesgarantido estar no primitivoint
, com oInteger
desmarcado automaticamente? Existem casos em que a primitiva seria automaticamente encaixotada e comparações de identidade de referência são realizadas? (que seria então tudofalse
!)