Подтвердить что ты не робот

Имеет ли смысл определять окончательную строку в Java?

Возможный дубликат:
String и Final

От http://docs.oracle.com/javase/6/docs/api/java/lang/String.html Я могу прочитать, что:

Strings are constant; their values cannot be changed after they are created. 

Означает ли это, что a final String на самом деле не имеет смысла в Java, в том смысле, что атрибут final как-то избыточен?

4b9b3361

Ответ 1

Объект String неизменен, но на самом деле это ссылка на объект String, который можно изменить.

Например:

String someString = "Lala";

Вы можете переназначить значение, удерживаемое этой переменной (чтобы ссылаться на другую строку):

someString = "asdf";

Однако при этом:

final String someString = "Lala";

Тогда вышеуказанное переназначение было бы невозможным и привело бы к ошибке времени компиляции.

Ответ 2

final относится к переменной, а не к объекту, поэтому да, это имеет смысл.

например.

final String s = "s";
s = "a"; // illegal

Ответ 3

Это имеет смысл. Ключевое слово final предотвращает будущие назначения переменной. Ниже приведена ошибка в java:

final String x = "foo";
x = "bar" // error on this assignment

Ответ 4

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