Discuss / Java / Bob问题:

Bob问题:

Topic source

ypx0410

#1 Created at ... [Delete] [Delete and Lock User]

关于输出两次输出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。

廖雪峰

#3 Created at ... [Delete] [Delete and Lock User]
bob = "Alice";

注意这里是重新赋值,并不是String "Bob"发生了改变,你改成可变的StringBuilder也不影响结论。

ypx0410

#4 Created at ... [Delete] [Delete and Lock User]

其实简单说,就是 String bob的指向变了,p.name的指向没变还是Bob~


  • 1

Reply