Для всех классов-оберток над примитивами кроме
Float и
Double работает механизм кэширования. Некоторые значения создаются на этапе инициализации класса, и переиспользуются когда объект создается
не оператором
new (например с помощью
valueOf).
Кэшируемые значения – оба возможных
Boolean,
Character до
'\u007f' (
127) и все целые числа от
-128 до
127 включительно. С Java 7 верхнюю границу для
Integer можно увеличить параметром
java.lang.Integer.IntegerCache.high.
Значения кэшируются и во многих других встроенных классах:
BigDecimal,
Currency, пустые коллекции. Детали можно узнавать из исходников и документаций, так как эти кэши реализованы
не на уровне JVM а в коде классов.
В конкретно этом примере скрыт еще один подвох: объект класса-обертки сравнивается с примитивом. Это приводит к
анбоксингу и сравнению значений. И ответ на вопрос –
да.