Встречается на собеседованиях • сегодня

Что произойдет при создании строки, занимающей много памяти, идентичной ранее созданной

В Java строки хранятся в пуле строк (String Pool). При создании строки через литерал (String s = "text") JVM сначала проверяет пул на наличие такой строки. Если строка найдена, возвращается ссылка на существующий объект.

Если строка создается через new String(), всегда создается новый объект в куче, даже если такая строка есть в пуле. Однако можно вручную добавить строку в пул через intern().

Пример:

java
String s1 = "largeString"; // добавляется в пул
String s2 = "largeString"; // используется существующая строка из пула
String s3 = new String("largeString"); // новый объект в куче
String s4 = s3.intern(); // ссылка на строку из пула

Таким образом, при создании идентичной строки:

  • Литерал: не будет дублирования памяти
  • new String(): создаст новый объект в куче
  • intern() вернет ссылку на существующую строку
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы