É 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!)

questionAnswers(2)

yourAnswerToTheQuestion