How-Do/Can я установил значение Строкового объекта в Java (не создавая новый Строковый объект)?
Для String
нет методов "set". Строки неизменяемы в Java. Чтобы изменить значение переменной String
, вам необходимо присвоить переменной другую строку. Вы не можете изменить существующую строку.
(без создания нового объекта String)
Назначение не создает новый объект - оно копирует ссылку. Обратите внимание, что даже если вы напишете что-то вроде этого:
s = "hello";
он не будет создавать новый строковый объект при каждом запуске. Строковый объект будет поступать из пула строк.
На самом деле в Java нет возможности сделать это, объекты String по умолчанию неизменяемы.
Фактически, это одна из причин, почему использование оператора конкатенации "+"
, такого как "str1" + "str2"
, ужасно неэффективно, потому что то, что он делает, копирует каждую строка, чтобы произвести третью.
В зависимости от ваших потребностей вам следует рассмотреть возможность использования StringBuilder
Конечно, вы можете получить доступ к внутреннему массиву символов через отражение. Но обычно это плохая идея. Подробнее на http://www.eclipsezone.com/eclipse/forums/t16714.html .
Строки неизменяемы, поэтому вы не можете изменить значение уже созданной строки.
Это немного зависит от вашего определения объекта. Если вы про ссылку, то нет. Ссылка создается всегда. Если вы имеете в виду память, используемую персонажами, конечно.
Строки интернированы (если возможно), что означает, что в присваивании:
String s1 = "Hello";
String s2 = "Hello";
есть 2 ссылки (указатели на ячейку памяти), но Hello
находится в памяти только на 1 месте. Это одна из причин, по которой строки не могут быть изменены.
Объект String неизменен в Java, поэтому любые изменения создают новый объект String. Используйте StringBuilder, если вы хотите внести изменения в строковый объект, не создавая новых объектов. В качестве бонуса StringBuilder позволяет предварительно выделить дополнительную память, если вы знаете что-то о возможной длине вашей строки.