Результат будет истинным в этом случае - но m
, s1
и s2
все ссылаются на разные строки. Интернирование выполняется автоматически для константных строковых выражений и может быть явно вызвано путем вызова метода intern
, но это не происходит для конкатенации строк и подстрок автоматически.
В реализации Java 7 от Sun x.substring(0)
будет фактически возвращать ту же ссылку (x
) обратно, но я не верю, что это гарантировано API.
Чтобы посмотреть на ваш пример:
public String makinStrings() {
String m = "Fred47";
String s = "Fred";
s = s + "47";
s = s.substring(0);
return s.toString();
}
Первые две строки требуют, чтобы в памяти было две строки, но я точно не знаю, когда гарантируется, что объекты будут созданы. Как только они создали , они останутся без присмотра - поэтому повторный вызов makinStrings
больше не создаст этих двух строк.
Конкатенация строк создаст новый объект строки.
substring
вызов не создаст новый строковый объект в реализации, на которую я смотрел - но это могло бы быть.
Вызов s.toString()
не не создаст новую строку (и это указано в JavaDoc).