final
означает, что ссылка никогда не может измениться.String
неизменность означает нечто иное;это означает, что при создании String
(значение, а не ссылка, т.е. «текст») его нельзя изменить.
Например:
String x = "Strings Are ";
String s = x;
Теперь s иx оба ссылаются на одно и то же String
.Однако:
x += " Immutable Objects!";
System.out.println("x = " + x);
System.out.println("s = " + s);
Это напечатает:
x = Strings Are Immutable Objects
s = Strings Are
Это доказывает, что любой созданный String
не может быть изменен, и когда любое изменение действительно происходит, создается новый String
.
Теперь для final
, если мы объявим x как final
и попытаемся изменить его значение, мы получим исключение:
final String x = "Strings Are ";
x += " Immutable Objects!";
Вот исключение:
java.lang.RuntimeException: Uncompilable source code - cannot assign a value to final variable x