String a = "test";
String b = a;
a = "wuut";
System.out.println(b);
打印出test
不应该b
保留a
的引用,而不仅仅是取其价值?
Java不能以这种方式使用对象和东西吗?
答案 0 :(得分:5)
不应该持有a的refence,而不仅仅是拿它的价值?
没有。 a
的值是引用。引用是获取对象的一种方式,而不是变量。赋值运算符只是将右侧的表达式的值复制到左侧的变量中。这就是它所做的一切 - 它非常简单。 Java中没有pass-by-reference,没有变量别名等。
答案 1 :(得分:2)
创建a
时,可以说它指向将memory_1
放入内存中。
将b
分配给a
后,b
也会指向同一个memory_1
位置。
现在,当a
更改值(并且因为String对象是不可变的)时,现在在内存中创建一个新值,现在a
中的memory_2
点。
但是嘿,b
仍指向memory_1
。
PS:Immutability是:
在面向对象和函数式编程中,不可变对象是一个对象,其状态在创建后无法修改。
答案 2 :(得分:0)
String a = test
所以a
是指向堆上字符串文字“test”的Object Reference Variable
。
String b = a;
没有b
是Object Reference Variable
,也指向堆上的相同字符串文字“测试”。
现在,
a = "wuut";
但是b
仍指向到字符串文字“test”,
所以它的b保存对象的引用,该对象之前也被a引用,但不是a。
答案 3 :(得分:0)
不,不。 b
假定a
的值。如果a
稍后更改,b
则不会。它不是别名或任何性质的东西。
答案 4 :(得分:0)
String a = "test";
现在a持有对字符串“test”的引用。
String b = a;
将a的值复制到b。 A是对“test”的引用,所以现在b也是对“test”的引用。
a = "wuut";
现在为a分配了对“wuut”的引用。这不会影响b,因为b不包含对。
的引用答案 5 :(得分:0)
没有。 b
保存a
的值,该值是对字符串"test"
的引用。您正在考虑的是,如果您修改了指向b
的字符串也会改变的字符串(类似a.append("wuut");
)。但是,无法更改Java字符串,因为它们是不可变的。
答案 6 :(得分:0)
让我们一步一步地完成这个过程。
String a = "test"
- 在此对象上创建对象"test"
并引用a
点。String b = a
- 创建新引用b
指向同一对象"test"
a = "wuut"
- 将参考a
重新分配给另一个对象,但引用b
仍然指向对象test