Я только что увидел код, похожий на этот:
public class Scratch
{
public static void main(String[] args)
{
Integer a = 1000, b = 1000;
System.out.println(a == b);
Integer c = 100, d = 100;
System.out.println(c == d);
}
}
При запуске этот блок кода будет распечатан:
false
true
Я понимаю, почему первый false: потому что оба объекта являются отдельными объектами, поэтому == сравнивает ссылки. Но я не могу понять, почему второе утверждение возвращает true? Есть ли какое-то странное правило autoboxing, которое срабатывает, когда значение Integer находится в определенном диапазоне? Что здесь происходит?