Выбор ответа Junior String и пул строк спрашивают часто обновлено

Литерал и new String

Вопрос

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

String a = "hi";
String b = "hi";
String c = new String("hi");
System.out.println((a == b) + " " + (a == c) + " " + a.equals(c));

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

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

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

Коротко

Правильный ответ: true false true. Одинаковые литералы берутся из пула строк, a == b сравнивает одну и ту же ссылку: true. new String всегда создаёт новый объект в куче: a == c даёт false. equals сравнивает содержимое: true.

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

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

Разбор

Одинаковые литералы берутся из пула строк, a == b сравнивает одну и ту же ссылку: true. new String всегда создаёт новый объект в куче: a == c даёт false. equals сравнивает содержимое: true. Вариант с true true true предполагает, что new String тоже берёт объект из пула, это не так.

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

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

Термины по теме