Возможный дубликат:
Weird Java Boxing
Недавно я увидел презентацию, где был следующий образец кода Java:
Integer a = 1000, b = 1000;
System.out.println(a == b); // false
Integer c = 100, d = 100;
System.out.println(c == d); // true
Теперь я немного смущен. Я понимаю, почему в первом случае результат "false" - это потому, что Integer является ссылочным типом, а ссылки "a" и "b" различны.
Но почему во втором случае результат "true"?
Я слышал мнение, что JVM кэширует объекты для значений int от -128 до 127 для некоторых целей оптимизации. Таким образом, ссылки "c" и "d" одинаковы.
Может ли кто-нибудь дать мне больше информации об этом поведении? Я хочу понять цели этой оптимизации. В каких случаях производительность увеличивается и т.д. Ссылка на некоторые исследования этой проблемы будет велика.