Как говорит Дженсграм, эти два утверждения не эквивалентны. Два важных правила:
Объединение строковых литералов в коде заканчивается строковой константой, поэтому эти два оператора точно эквивалентны (они будут выдавать идентичный байт-код):
String x = "foo" + "bar":
String x = "foobar";
Строковые константы интернируются автоматически, вам не нужно делать это явно
Теперь, это концентрируется на литералах - вы на самом деле вызываете intern
на литералах, или ваш реальный вариант использования несколько отличается (например, интернирование значений, извлекаемых из базы данных, которую вы будете часто видеть)? Если да, пожалуйста, дайте нам более подробную информацию.
РЕДАКТИРОВАТЬ: Хорошо, основываясь на редактировании вопроса: это может сэкономить немного памяти , если , то вы в конечном итоге сохраните возвращаемое значение toAddress()
где-нибудь, для чего оно останется долгое время и вы будете иметь один и тот же адрес несколько раз. Если эти не , дело в том, что стажировка, скорее всего, только ухудшит ситуацию. Я не знаю наверняка, остаются ли интернированные строки навсегда, но это вполне возможно.
Мне кажется, что вряд ли будет хорошим вариантом интернирования, и, скорее всего, будет только усугублять ситуацию. Вы упомянули, что пытались сэкономить место на пермгене - почему вы считаете, что интернирование там поможет? Связанные строки в любом случае не окажутся в permgen, если я не сильно ошибаюсь.