Строковые литералы интернированы - автоматически помещены , удваивается - нет.Для других автобоксов можно гарантированно использовать кэшированные объекты:
Integer i1 = 1;
Integer i2 = 1;
System.out.println(i1 == i2); // true, guaranteed
Обратите внимание, что только гарантировано для значений от -128 до 127, но работает и для больших значений.См. раздел 5.1.7 JLS для получения дополнительной информации.
Обратите внимание, что для строк это действительно только из-за интернирования строковых констант:
String s1 = new String("a");
String s2 = new String("a");
System.out.println(s1 == s2); // false
... тогда как для целочисленного бокса повторное использование кэшированных значений выполняется при исполнение время:
int x = 10;
x -= 9;
Integer i1 = x;
Integer i2 = 1;
System.out.println(i1 == i2); // true, guaranteed