Могу ли я установить значение String в Java без использования конструктора? - PullRequest
7 голосов
/ 02 августа 2010

How-Do / Можно ли установить значение объекта String в Java (без создания нового объекта String)?

Ответы [ 7 ]

13 голосов
/ 02 августа 2010

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

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

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

s = "hello";

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

4 голосов
/ 02 августа 2010

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

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

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

2 голосов
/ 02 августа 2010

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

1 голос
/ 07 ноября 2013

Я наткнулся на этот вопрос, потому что мне нужно установить строку внутри «включающего типа» - анонимного типа.Но все переменные, которые я хочу установить внутри и использовать снаружи, должны быть окончательными.

Простое решение - использовать StringBuilder - это изменяемая строка.

1 голос
/ 02 августа 2010

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

0 голосов
/ 02 августа 2010

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

0 голосов
/ 02 августа 2010

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

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

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

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

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