Я знаю, что похожих сообщений по этой теме, но они не совсем отвечают на мой вопрос.Когда вы делаете:
Integer a = 10;
Integer b = 10;
System.out.println("a == b: " + (a == b));
Это (по-видимому) будет печатать true
большую часть времени, потому что целые числа в диапазоне [-128, 127] так или иначе кэшируются.Но:
Integer a = new Integer(10);
Integer b = new Integer(10);
System.out.println("a == b: " + (a == b));
Вернется false
.Я понимаю, что я запрашиваю новые экземпляры Integer, но так как примитивы в штучной упаковке являются неизменяемыми в Java, и механизм уже существует, чтобы делать "правильные вещи" (как видно в первом случае), почему это происходит?
Разве не имеет смысла, если все экземпляры целого числа с 10 будут одним и тем же объектом в памяти?Другими словами, почему у нас нет «Integer interning», которое было бы похоже на «String interning»?
Еще лучше, разве не имело бы больше смысла, если бы примитивы в штучной упаковке представляли то же самое? независимо от значения (и типа) , один и тот же объект?Или хотя бы правильно ответьте на ==
?