在Java中定义最后一个字符串有意义吗?

在Java中定义最后一个字符串有意义吗?,java,string,final,Java,String,Final,可能重复: 从中我可以看出: Strings are constant; their values cannot be changed after they are created. 这是否意味着final字符串在Java中没有真正意义,因为final属性在某种程度上是冗余的?final指的是变量,而不是对象,所以是的,它有意义 e、 g String对象是不可变的,但它实际上是对String对象的引用,可以更改该对象 例如: String someString = "Lala"; 您可

可能重复:

从中我可以看出:

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

这是否意味着
final字符串
在Java中没有真正意义,因为
final
属性在某种程度上是冗余的?

final
指的是变量,而不是对象,所以是的,它有意义

e、 g


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

例如:

String someString = "Lala";
您可以重新分配此变量持有的值(使其引用不同的字符串):

然而,在这种情况下:

final String someString = "Lala";

那么上述重新分配将不可能,并将导致编译时错误。

这是有意义的。
final
关键字防止将来分配给变量。以下是java中的错误:

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

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

声明变量final与您分配给它的对象无关。
对象本身是不可变的,但对它的引用可能是可变的。将其设置为“最终”
也会使引用不可变。感谢所有的回答和评论。很抱歉重复。我从这个答案中了解到了什么;由于字符串是不可变的,当我们更改其内容时,它将指向另一个对象。因此,如果字符串是最终的,那么重新分配将不起作用。但是在StringBuffer的情况下,它是可变的,然后我们可以更改它的内容。是这样吗?
final String someString = "Lala";
final String x = "foo";
x = "bar" // error on this assignment