Сколько строковых объектов Java создано в коде String s = "abc" + "xyz";?
Сколько строковых объектов Java будет создано в следующем выражении?
String s = "abc" + "xyz";
Я думаю, три?
Ответы
Ответ 1
Компилятор создает 1 String для запуска JVM, потому что компилятор может определить результирующую строку во время компиляции, интернированный и статически сохраненный в JVM Таблица строк.
FYI, если оператор представляет собой конкатенацию переменных (не определяемых во время выполнения), будет создана 1 String, но она также создала бы StringBuilder
. Код будет скомпилирован для:
new StringBuilder().append(abcVar).append(xyzVar).toString()
Ответ 2
Ответ - это один глобальный объект String для каждого прогона программы и нулевые новые объекты String для выполнения каждого оператора. Это связано с тем, что спецификация языка Java говорит, что выражение "abc" + "xyz"
является константой времени компиляции [0] и что новый новый объект String не будет создан при выполнении оператора [1].
Ссылки
[0]: http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#5313
Примеры постоянных выражений:
"The integer " + Long.MAX_VALUE + " is mighty big."
[1]: http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.18.1
Если только одно выражение операнда имеет тип String, то преобразование строки выполняется в другом операнде для создания строки во время выполнения. Результатом является ссылка на объект String (только что созданный, если выражение не является выражением постоянной времени компиляции (§15.28)), которое является конкатенацией
Ответ 3
Существует три способа создания строк в java
1) мы можем создать строку, просто назначив группу символов переменной типа string
например:
String s; //declare String type variable,
s="hello"; //assign a group of characters to it
2) мы можем создать объект для строки путем выделения памяти с помощью нового оператора. Это похоже на создание объекта в любом классе.
например: String s =new String("Hello");
3) Мы можем создать строки путем преобразования массивов символов в строку.
например: char arr[] = {'p','r','a','s','h','a','n','t'};