Сегодня мы рассмотрим одну из скрытых ловушек Java — автобоксинг и анбоксинг. Эти механизмы удобны, но могут вызывать неожиданные ошибки, влияя на производительность и корректность работы кода:
При сравнении объектов-оберток (например,
Integer
) с использованием оператора ==
вы можете получить неожиданный результатInteger a = 127;
Integer b = 127;
System.out.println(a == b); // true
Integer c = 128;
Integer d = 128;
System.out.println(c == d); // false
Значения от -128 до 127 кешируются JVM для оберток
Integer
. Поэтому ссылки на объекты с такими значениями указывают на один и тот же объект, а вне этого диапазона создаются новые экземпляры. Используйте метод
.equals()
для сравнения значений. System.out.println(c.equals(d)); // true
А при анбоксинге объекта-обертки, содержащего
null
, возникает NullPointerException
Integer value = null;
int result = value; // Ошибка: NullPointerException
Проверяйте объект на null перед анбоксингом:
if (value != null) {
int result = value;
}
🔥 Эти знания помогут вам избежать неожиданных ошибок и сделать код более надежным.