Строки могут приходить из разных мест, и по умолчанию только строковые литералы находятся в пуле строк. Например, когда вы вызываете BufferedReader.readLine()
, возвращаемая строка отсутствует в пуле строк.
Имеет ли смысл объединять такие строки, используя String.intern()
или канонизирующую карту, зависит от того, сколько у вас дублирования, и сколько памяти вы можете сэкономить, чтобы уменьшить это дублирование.
Например, если вы читаете файл XML, может быть очень полезно канонизировать имена элементов. Если вы читаете файл данных об адресе, может быть полезно канонизировать почтовые индексы и / или названия городов. Однако в обоих случаях я бы посмотрел на использование Map
вместо вызова intern()
, потому что последний потребляет постоянную память (которая является более редким ресурсом, чем обычная кучная память).