Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不可变字符串类?_Java - Fatal编程技术网

Java 不可变字符串类?

Java 不可变字符串类?,java,Java,如果我们有这些声明: String S1 = "AAA"; S1 = "aaa"; String S1 = new String("AAA"); S1="aaa"; 这意味着分配给特定属性的原始值没有改变(因为string类是不可变的,S1是一个内部对象) 现在。。。 如果我们有以下声明: String S1 = "AAA"; S1 = "aaa"; String S1 = new String("AAA"); S1="aaa"; 这意味着分配给string类中特定属性的原始值已更改。(

如果我们有这些声明:

String S1 = "AAA";
S1 = "aaa";
String S1 = new String("AAA");
S1="aaa";
这意味着分配给特定属性的原始值没有改变(因为string类是不可变的,S1是一个内部对象)

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

String S1 = "AAA";
S1 = "aaa";
String S1 = new String("AAA");
S1="aaa";
这意味着分配给string类中特定属性的原始值已更改。(因为string类是不可变的,S1不是内部对象)


我的理解正确吗?

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

编辑:

在第二种情况下,
S1
不是实习的,但这不会取消其不变性。所以
String
赋值始终不会更改左对象,而只是重写引用。

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

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

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

它允许对字符串的更改以更改列表的方式从原始字符串分支出来

String s = new String();
将创建一个空字符串对象(“”)。变量s引用该对象。

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

它允许对字符串的更改以更改列表的方式从原始字符串分支出来

String s = new String();

将创建一个空字符串对象(“”)。变量s表示该对象。

添加到其他答案中


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

添加到其他答案中


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

Easy to try and see S1在任何情况下都不会改变。Easy to try and see S1在任何情况下都不会改变。唯一改变的是,
S1
指向不同的
字符串
对象。您没有也不能修改
字符串
本身。唯一改变的是
S1
指向不同的
字符串
对象。您没有也不能修改
字符串本身。