Рассмотрим следующий фрагмент:
    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"
Очевидно, что последняя строка будет  ВСЕГДА печатать "false": мы используем сопоставление сравнения ссылок ==, а объект new будет  НИКОГДА == к уже существующему объекту.
Вопрос о первых трех строках: эти сравнения  гарантированы, чтобы быть на примитиве int, с Integer auto-unboxed? Существуют ли случаи, когда примитив был бы автоматически помещен в коробку, и выполнялись сравнительные сравнения идентичности? (что тогда было бы тогда false!)
