Я могу установить значение Строки в Java, не используя конструктора?

How-Do/Can я установил значение Строкового объекта в Java (не создавая новый Строковый объект)?

7
задан kamaci 26 February 2013 в 11:40
поделиться

6 ответов

Для String нет методов "set". Строки неизменяемы в Java. Чтобы изменить значение переменной String , вам необходимо присвоить переменной другую строку. Вы не можете изменить существующую строку.

(без создания нового объекта String)

Назначение не создает новый объект - оно копирует ссылку. Обратите внимание, что даже если вы напишете что-то вроде этого:

s = "hello";

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

13
ответ дан 6 December 2019 в 08:41
поделиться

На самом деле в Java нет возможности сделать это, объекты String по умолчанию неизменяемы.

Фактически, это одна из причин, почему использование оператора конкатенации "+" , такого как "str1" + "str2" , ужасно неэффективно, потому что то, что он делает, копирует каждую строка, чтобы произвести третью.

В зависимости от ваших потребностей вам следует рассмотреть возможность использования StringBuilder

4
ответ дан 6 December 2019 в 08:41
поделиться

Конечно, вы можете получить доступ к внутреннему массиву символов через отражение. Но обычно это плохая идея. Подробнее на http://www.eclipsezone.com/eclipse/forums/t16714.html .

0
ответ дан 6 December 2019 в 08:41
поделиться

Строки неизменяемы, поэтому вы не можете изменить значение уже созданной строки.

2
ответ дан 6 December 2019 в 08:41
поделиться

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

Строки интернированы (если возможно), что означает, что в присваивании:

String s1 = "Hello";
String s2 = "Hello";

есть 2 ссылки (указатели на ячейку памяти), но Hello находится в памяти только на 1 месте. Это одна из причин, по которой строки не могут быть изменены.

0
ответ дан 6 December 2019 в 08:41
поделиться

Объект String неизменен в Java, поэтому любые изменения создают новый объект String. Используйте StringBuilder, если вы хотите внести изменения в строковый объект, не создавая новых объектов. В качестве бонуса StringBuilder позволяет предварительно выделить дополнительную память, если вы знаете что-то о возможной длине вашей строки.

1
ответ дан 6 December 2019 в 08:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: