Сколько строковых объектов Java создано в коде String s = "abc" + "xyz" ;? - PullRequest
20 голосов
/ 05 июля 2011

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

String s = "abc" + "xyz"; 

Полагаю, три?

Ответы [ 3 ]

23 голосов
/ 05 июля 2011

Компилятор создает 1 строку для каждого запуска JVM, поскольку компилятор может определить результирующую строку во время компиляции, он является внутренним и статически хранится в таблице строк JVM .


К вашему сведению, если бы оператор объединял переменных (невозможно определить во время выполнения), была бы создана 1 строка, но она также создала бы StringBuilder. Код будет компилироваться в:

new StringBuilder().append(abcVar).append(xyzVar).toString()
9 голосов
/ 15 августа 2011

Ответ - один глобальный объект 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)), который является конкатенацией

0 голосов
/ 11 января 2012

Существует три способа создания строк в java

1) мы можем создать строку, просто назначив группу символов переменной типа string

например:

     String s;  //declare String type variable,  
     s="hello"; //assign a group of characters to it

2) мы можем создать объект в строку, выделив память с помощью оператора new. Это похоже на создание объекта для любого класса.

например: String s =new String("Hello");

3)Мы можем создать строки, преобразовав массивы символов в строку.

Например: char arr[] = {'p','r','a','s','h','a','n','t'};

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...