java - string类的哪些对象是final的,是否有任何对象是final的

标签 java string

在 SCJP 书中,我得到了 Kathy Sierra 的观点,即它们不是 Java 中的最终对象。 java中只有final引用变量。

但我认为字符串类的对象是最终的。一旦初始化,它们的状态就不能改变。

现在的问题是string类的对象是否是final的。 如果不是,那么 string 类的对象是不可变的。

谢谢

最佳答案

But i think objects of string class are final. As once initialized their state can not change.

不,它们不是 Java 意义上的final。它们是不可变的,但final纯粹与变量/数据成员相关,而不是对象。

这是一个例子:

final String a = "foo";
String b = "bar";

b = "updated bar"; // Compiles and works, `b` (the variable) can be changed
a = "updated foo"; // Won't compile, you're not allowed to change the `a` variable

final 是关于“变量”的值是否可以更改,而不是关于对象的状态是否可以更改。

下面是一个 final 变量引用可变对象的示例:

final Map a = new HashMap();

a.add("foo", "bar"); // Works; we're not changing `a`, we're changing the state
                     // of the object `a` refers to

并且只是将对象完全从中取出:

final int a = 5;
a = 6; // Won't compile, because we aren't allowed to change `a`

关于java - string类的哪些对象是final的,是否有任何对象是final的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22337813/

相关文章:

java - 如何使用 Java 在 Mongo 中添加和删除数组中的元素?

java - 绑定(bind)CXF Client源IP地址

java - 比较 Java 中的字符串引用

regex - 替换文件中的标记时的 Groovy 正则表达式

java - 通过远程方法调用进行文件上传和下载

java - 如何创建一个空的 Guava ImmutableList?

java - 使用 UrlConnection 逐行读取是否考虑换行?

python - 如何使用 python 将字符串字典转换为文本 block

php - 合并两个正则表达式以截断字符串中的单词

java - 如何获取两个字符串或两个字符之间的多个字符串