Я только что увидел код, похожий на этот:
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 находится в определенном диапазоне? Что здесь происходит?