При сравнении целочисленного объекта и постоянного значения упаковывает ли Java значение или распаковывает целочисленный объект?
На основании того, что я прочитал, «==» является сравнительным сравнением, поэтому логично предположить, что Java помещает константу в коробку для выполнения контрольного сравнения между объектами. Тем не менее, приведенный ниже тестовый код, похоже, дает противоречивые результаты.
Integer v1 = 1000;
Integer v2 = 1000;
boolean b1 = v1 == 1000; //True.
boolean b2 = v1 == v2; //False. Proof that 1000 boxes to new object and is not fetched from cache.
Так как же в Java работает сравнение объектов и констант с использованием ==
? Сравнивает ли оператор по значению в этом случае?
Integer::valueOf(1000)
дает вам шанс на кеширование. - person John3136   schedule 04.03.2020Integer v1 = 1000;
вызывает методvalue0f
внутри себя. - person Amrish Kumar   schedule 04.03.2020valueOf
, он может кэшировать, а может и нет - по крайней мере, есть шанс! - person John3136   schedule 05.03.2020valueOf
. Бокс вызывает этот метод изнутри.Integer v1 = 1000;
иInteger v1 = Integer.valueOf(1000);
одинаковы, я знаю это по отладчику. - person Amrish Kumar   schedule 05.03.2020