不可变的字符串类?

时间:2012-11-29 16:30:20

标签: java

如果我们有这些陈述:

String S1 = "AAA";
S1 = "aaa";

这意味着分配给特定属性的原始值没有改变。(因为字符串类是不可变的,S1是一个实体对象)。

...现在 如果我们有以下声明:

String S1 = new String("AAA");
S1="aaa";

这意味着分配给字符串类中特定属性的原始值已更改。(因为字符串类是不可变的,S1不是实体对象)

我的理解是对吗?

3 个答案:

答案 0 :(得分:4)

不,String对象在任何情况下都是不可变的。当你调用new String("foo")时,这只是创建另一个包含传递内容的字符串。所以不要这样做。

编辑:
在第二种情况下S1没有实习,但这并没有取消其不变性。因此,String赋值始终不会更改左对象,只是重写引用。

答案 1 :(得分:1)

字符串是不可变的。 这意味着String的实例无法更改。 您正在创建新变量以引用另一个但仍然不可变的String实例。

它允许更改字符串以在更改列表方法

中分支原始字符串
String s = new String();

创建一个空String对象(“”)。变量s指的是那个对象。

答案 2 :(得分:1)

添加其他答案,

使用String对象的字符串构造函数是一个设计缺陷(两次创建不可变实例没有意义)并且已弃用。不要使用它。