在Java中定义最终字符串是否有意义?

Cam*_*mpa 42 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. 
Run Code Online (Sandbox Code Playgroud)

这是否意味着final String在某种意义上该final属性在某种程度上是多余的,在Java中实际上没有意义?

Mik*_*wan 59

String对象是不可变的,但它实际上是对String可以更改的对象的引用.

例如:

String someString = "Lala";
Run Code Online (Sandbox Code Playgroud)

您可以重新分配此变量所持有的值(以使其引用不同的字符串):

someString = "asdf";
Run Code Online (Sandbox Code Playgroud)

但是,有了这个:

final String someString = "Lala";
Run Code Online (Sandbox Code Playgroud)

然后上面的重新分配是不可能的,并且会导致编译时错误.


MBy*_*ByD 19

final 指的是变量,而不是对象,所以是的,它是有道理的.

例如

final String s = "s";
s = "a"; // illegal
Run Code Online (Sandbox Code Playgroud)


Col*_*n D 6

这说得通.的final关键字防止将来分配给变量.以下是java中的错误:

final String x = "foo";
x = "bar" // error on this assignment
Run Code Online (Sandbox Code Playgroud)


Kal*_*dre 6

引用是最终的,对象不是。您可以将可变对象定义为 final 并更改它的状态。final 确保您使用的引用永远不会再次指向另一个对象。