При использовании литерала строки ("abc") строка создается в пуле строк (String Pool). Если строка с таким же значением уже существует в пуле, возвращается ссылка на существующий объект. Это оптимизация для экономии памяти.
При использовании new String("abc") всегда создается новый объект строки в куче (heap), даже если строка с таким же значением уже есть в пуле строк.
Пример:
java
Различия в таблице:
| Критерий | Литерал строки ("abc") | new String("abc") |
|---|---|---|
| Место создания | Пул строк (String Pool) | Куча (Heap) |
| Создание объекта | Возвращает существующий или создает новый | Всегда создает новый объект |
| Оптимизация памяти | Эффективно использует пул для повторений | Может создавать дубликаты, менее эффективно |
Сравнение ссылок (==) | Часто true для строк с одинаковым значением | Всегда false для строк с одинаковым значением, созданных отдельно |