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