在 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/