Выбор ответа Junior Основы: типы, обёртки, static спрашивают часто обновлено

Integer == для 127 и 128

Вопрос

Что выведет код?

Integer a = 127, b = 127;
Integer c = 128, d = 128;
System.out.print((a == b) + " " + (c == d));

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: true false. Автоупаковка вызывает Integer.valueOf, который возвращает объекты из кеша для значений от -128 до 127.

Варианты ответа

  1. true falseправильный ответ
  2. true true
  3. false false
  4. false true

Разбор

Автоупаковка вызывает Integer.valueOf, который возвращает объекты из кеша для значений от -128 до 127. Обе переменные со значением 127 указывают на один объект, == даёт true. Для 128 создаются два разных объекта, ссылки разные: false. true true было бы, если бы == сравнивал значения, но для объектов он сравнивает ссылки. Значения сравнивают через equals.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.