Я читал объект Java String, и у меня был этот вопрос -Java Строка создания объекта
String x="a";
String y="b";
ли создать два объекта в Java?
Я читал объект Java String, и у меня был этот вопрос -Java Строка создания объекта
String x="a";
String y="b";
ли создать два объекта в Java?
Эти две строки кода не создают никаких объектов. Строковые литералы, такие как "a"
, помещаются в string pool и предоставляются после загрузки класса.
Если вы
String x = new String("a");
String y = new String("b");
два объекта будут быть созданы во время выполнения.
Эти вопросы/ответы должны охватывать последующие вопросы:
Время загрузки класса по-прежнему является технически исполняемым, поскольку экземпляры строк создаются динамически и не выделяются статически компилятором. – biziclop
Хорошо, хорошо :-) Обновлено. – aioobe
Строковые литералы в пуле строк обернуты объектами String, поэтому две строки в вопросе в конечном итоге приводят к созданию двух создаваемых строковых объектов. –
Строка с литералов будет создаваться в Струнный Pool. а String через новые операторы создаются в памяти кучи.
Преимущество создания строковых литералов заключается в том, что это значение String уже доступно в String Pool, тогда вы получаете ту же ссылку, где с помощью нового оператора каждый раз, когда вы создаете новую ссылку на новый объект.
В вашем случае вы получите такую же ссылку. поэтому только объект.
Когда инициализируется 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».
В приведенном выше случае String s1 = new String ("string"); String s2 = new String ("string"); String s3 = new String ("string"); Ли: Будет создано 4 объекта- Первый объект будет создан в постоянной памяти кучи java как часть аргумента, который мы передаем, - «строка». и он будет создан в String Literal Pool. Или 3 объекта? – AnswerDroid
Это даже не компилируется. – async