2014-09-28 6 views

ответ

4

Эти две строки кода не создают никаких объектов. Строковые литералы, такие как "a", помещаются в string pool и предоставляются после загрузки класса.

Если вы

String x = new String("a"); 
String y = new String("b"); 

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

Эти вопросы/ответы должны охватывать последующие вопросы:

+3

Время загрузки класса по-прежнему является технически исполняемым, поскольку экземпляры строк создаются динамически и не выделяются статически компилятором. – biziclop

+0

Хорошо, хорошо :-) Обновлено. – aioobe

+1

Строковые литералы в пуле строк обернуты объектами String, поэтому две строки в вопросе в конечном итоге приводят к созданию двух создаваемых строковых объектов. –

1

Строка с литералов будет создаваться в Струнный Pool. а String через новые операторы создаются в памяти кучи.

Преимущество создания строковых литералов заключается в том, что это значение String уже доступно в String Pool, тогда вы получаете ту же ссылку, где с помощью нового оператора каждый раз, когда вы создаете новую ссылку на новый объект.

В вашем случае вы получите такую ​​же ссылку. поэтому только объект.

4

Когда инициализируется String с использованием нового оператора, создается его новый объект. Как и в случае

String s1 = new String ("string");

String s2 = new String ("string");

String s3 = new String ("string");

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

Строка s1 = "string";

Строка s2 = "string";

Строка s3 = "string1";

В приведенном выше примере в пуле строк («строка» и «строка1») будут созданы только две строки. Где String s1 и s2 будут ссылаться на один объект «string», а s3 будет ссылаться на другой строковый объект «string1».

+0

В приведенном выше случае String s1 = new String ("string"); String s2 = new String ("string"); String s3 = new String ("string"); Ли: Будет создано 4 объекта- Первый объект будет создан в постоянной памяти кучи java как часть аргумента, который мы передаем, - «строка». и он будет создан в String Literal Pool. Или 3 объекта? – AnswerDroid

 Смежные вопросы

  • Нет связанных вопросов^_^