Подтвердить что ты не робот

Сколько строковых объектов Java создано в коде String s = "abc" + "xyz";?

Сколько строковых объектов Java будет создано в следующем выражении?

String s = "abc" + "xyz"; 

Я думаю, три?

4b9b3361

Ответ 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'};