Код на внимательность! Что выведет эта программа?
Посмотрите на фрагмент кода ниже. Как думаете, какой результат мы увидим в консоли? Отработает ли он вообще или упадет с ошибкой?
public class Main {
public static void main(String[] args) {
Integer a = 100;
Integer b = 100;
Integer c = 500;
Integer d = 500;
System.out.println(a == b);
System.out.println(c == d);
}
}
Пишите ваши догадки в комментарии!
А правильный ответ и объяснение я спрятал под спойлером ниже:
Ответ:
true
false
Почему так?
Дело в Integer Cache. В Java объекты класса Integer автоматически кэшируются в диапазоне от -128 до 127.
Поэтому переменные a и b (значение 100) указывают на один и тот же закэшированный объект в памяти. Сравнение ссылок == для них выдаст true.
А вот значение 500 выходит за пределы кэша. Для c и d создаются два абсолютно разных объекта в куче. Сравнение их ссылок через == вернет false.
Мораль: чтобы сравнивать значения объектов-оберток в Java, всегда используйте .equals()! |
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪