0

如果我们有这些陈述:

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

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

现在......如果我们有以下陈述:

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

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

我的理解正确吗?

4

3 回答 3

4

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

编辑:
在第二种情况下S1没有实习,但这并没有取消它的不变性。所以String赋值总是不会改变左对象,而只是重写引用。

于 2012-11-29T16:33:07.340 回答
1

添加到其他答案,

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

于 2012-11-29T16:37:58.300 回答
1

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

它允许对字符串的更改以更改列表之类的方法分支出原始字符串

String s = new String();

创建一个空字符串对象 ("")。变量 s 指的是那个对象。

于 2012-11-29T16:33:42.020 回答