Создание объекта пула Java String - PullRequest
4 голосов
/ 22 августа 2011

Я сомневаюсь, что мои концепции понятны в stringpool.Пожалуйста, изучите следующий набор кодов и проверьте правильность моих ответов в количестве объектов, созданных после следующего набора утверждений: -

1)

String s1 = "abc";
String s2 = "def";
s2 + "xyz";

2)

 String s1 = "abc";
 String s2 = "def";
 s2 = s2 + "xyz";

3)

String s1 = "abc";
String s2 = "def";
String s3 = s2 + "xyz";

4)

String s1 = "abc";
String s2 = "def";
s2 + "xyz";
String s3 = "defxyz";

Согласно тому, что я знаю концептуально, во всех 4 вышеупомянутых случаях будет 4 объекта, созданных после выполнениякаждого набора линий.

Ответы [ 2 ]

7 голосов
/ 22 августа 2011

Вы не можете иметь выражение типа s2 + "xyz" само по себе. Только константы оцениваются компилятором, и только строковые константы автоматически добавляются в пул литералов String.

, например

final String s1 = "abc"; // string literal
String s2 = "abc"; // same string literal

String s3 = s1 + "xyz"; // constants evaluated by the compiler 
                        // and turned into "abcxyz"

String s4 = s2 + "xyz"; // s2 is not a constant and this will
                        // be evaluated at runtime. not in the literal pool.
assert s1 == s2;
assert s3 != s4; // different strings.
1 голос
/ 23 августа 2011

Почему тебя это волнует? Отчасти это зависит от того, насколько агрессивно оптимизируется компилятор, поэтому нет правильного правильного ответа.

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