Имеет ли смысл определять окончательную строку в 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
как-то избыточен?
Ответы
Ответ 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
Ссылки являются окончательными, объекты - нет. Вы можете определить изменяемый объект как окончательный и изменить его состояние. Конечным результатом является то, что ссылка, которую вы используете, больше не может указывать на другой объект.