关于输出两次输出Bob; 声明变量
String bob = "Bob";
是引用类型变量,所以存储的是一个地址,比如0x0011,指向Bob
调用方法时:
p.setName(bob);
此时传递的其实是地址:0x0011,指向的是bob,所以第一次打印的内容是:Bob。
然后重新赋值:
bob = "Alice"; // bob改名为Alice
但是在java中String类型是不可变的,当发生改变时,会重新分配内存,即生成一个新的内存地址,例如:0x0022,此时p.bob的内存指向仍为0x0011,也就是Bob,所以输出的依旧是Bob。
1、首先bob的指向改变了。
2、其次输出和bob的指向没关系。
3、看清楚方法的返回值,返回的是name,name又没变,当然是返回Bob。
bob = "Alice";
注意这里是重新赋值,并不是String "Bob"发生了改变,你改成可变的StringBuilder也不影响结论。
其实简单说,就是 String bob的指向变了,p.name的指向没变还是Bob~
Sign in to make a reply
ypx0410
关于输出两次输出Bob; 声明变量
是引用类型变量,所以存储的是一个地址,比如0x0011,指向Bob
调用方法时:
此时传递的其实是地址:0x0011,指向的是bob,所以第一次打印的内容是:Bob。
然后重新赋值:
但是在java中String类型是不可变的,当发生改变时,会重新分配内存,即生成一个新的内存地址,例如:0x0022,此时p.bob的内存指向仍为0x0011,也就是Bob,所以输出的依旧是Bob。