Сколько объектов Java сгенерировано этим - новая строка ("abcd") - PullRequest
3 голосов
/ 04 марта 2011
String s = new String("abcd");

Ответы [ 3 ]

9 голосов
/ 04 марта 2011

В внутреннем пуле есть одна строка, которая будет использоваться повторно при каждом запуске кода.

Тогда есть дополнительная строка, которая создается каждый раз, когда вы запускаете эту строку. Так, например:

for (int i = 0; i < 10; i++) {
    String s = new String("abcd");
}

закончится 11 строками с содержимым «abcd» в памяти - интернированная и 10 копий.

2 голосов
/ 04 марта 2011

Вы создаете один объект.JVM создаст другой закулисный объект, потому что он интернирует строку, созданную константой при загрузке класса, но это вещь JVM ( вы не просили его intern).И, что более важно, вы можете быть совершенно уверены, что, сделав:

String s1 = new String("abcd");

один раз, тогда

String s2 = new String("abcd");

создаст только один объект.

JVMсоздает другой (первый) объект String при загрузке класса: компилятор помещает строку в область строковых констант в файле .class.Они считываются в пул констант класса и интернированы при загрузке класса.

Так, когда эта строка кода выполняет , одинString создано.Но факт наличия этой строки в классе создает два: один для константы, которая создается при загрузке класса, и один для этой строки кода.

0 голосов
/ 04 марта 2011

Вы создаете один объект, который является String = "abcd".Вы звоните новым только один раз.

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