如果我们有这些陈述:
String S1 = "AAA";
S1 = "aaa";
这意味着分配给特定属性的原始值没有改变。(因为字符串类是不可变的并且 S1 是一个实习对象)。
现在......如果我们有以下陈述:
String S1 = new String("AAA");
S1="aaa";
这意味着分配给字符串类中特定属性的原始值已更改。(因为字符串类是不可变的并且 S1 不是实习对象)
我的理解正确吗?
如果我们有这些陈述:
String S1 = "AAA";
S1 = "aaa";
这意味着分配给特定属性的原始值没有改变。(因为字符串类是不可变的并且 S1 是一个实习对象)。
现在......如果我们有以下陈述:
String S1 = new String("AAA");
S1="aaa";
这意味着分配给字符串类中特定属性的原始值已更改。(因为字符串类是不可变的并且 S1 不是实习对象)
我的理解正确吗?
不,String
对象在任何情况下都是不可变的。当您调用new String("foo")
它时,只需创建另一个内容为传递的字符串。所以不要这样做。
编辑:
在第二种情况下S1
没有实习,但这并没有取消它的不变性。所以String
赋值总是不会改变左对象,而只是重写引用。
添加到其他答案,
采用 String 对象的 String 构造函数是一个设计缺陷(两次创建不可变实例没有意义)并且已被弃用。不要使用它。
字符串是不可变的。这意味着 String 的实例不能更改。您正在创建新变量以引用不同但仍然不可变的 String 实例。
它允许对字符串的更改以更改列表之类的方法分支出原始字符串
String s = new String();
创建一个空字符串对象 ("")。变量 s 指的是那个对象。