Сколько строковых объектов Java будет создано в следующем выражении?
String s = "abc" + "xyz";
Я думаю, три?
Сколько строковых объектов Java будет создано в следующем выражении?
String s = "abc" + "xyz";
Я думаю, три?
Компилятор создает 1 String для запуска JVM, потому что компилятор может определить результирующую строку во время компиляции, интернированный и статически сохраненный в JVM Таблица строк.
FYI, если оператор представляет собой конкатенацию переменных (не определяемых во время выполнения), будет создана 1 String, но она также создала бы StringBuilder
. Код будет скомпилирован для:
new StringBuilder().append(abcVar).append(xyzVar).toString()
Ответ - это один глобальный объект 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)), которое является конкатенацией
Существует три способа создания строк в 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'};