Ответ
new String() всегда создает новый объект в куче, даже если идентичная строка уже существует в пуле строк (String Pool). Строковый литерал (например, "text") сначала ищется в пуле строк, и если найден — возвращается ссылка на существующий объект, что экономит память.
Пример:
String a = "hello"; // Использует/создает объект в пуле строк
String b = "hello"; // Возвращает ссылку на тот же объект из пула
String c = new String("hello"); // Создает новый объект в куче
System.out.println(a == b); // true (один и тот же объект)
System.out.println(a == c); // false (разные объекты)
System.out.println(a.equals(c)); // true (одинаковое содержимое)
Почему это важно:
- Пул строк — оптимизация для экономии памяти и быстрого сравнения через
==. new String()может быть полезен в редких случаях, например, для создания независимой копии подстроки, чтобы избежать удержания в памяти большой исходной строки (memory leak).- Для сравнения содержимого строк всегда используйте
.equals(), а не==.