思考下面的简单代码
public class Study_9_30_1 {
public static void main(String[] args) {
Person p1 = new Person();
p1.name="老张";
Person p2 = p1;
p2.name = "老李";
p1.show();
p2.show();
}
}
class Person{
String name;
public void show() {
System.out.println(name);
}
}
此代码的运行结果会输出什么?
运行结果
为什么p1.name和p2,name都为李四?
看下面这张图片
当创建一个person类的对象p1时,此时会在栈里声明一个p1,并在堆里分配快内存,p1指向这块内存;当执行Person p2 = p1;语句时,同样会在栈里声明一个p2,,并且p2同样指向一块内存(就是p1所指的内存,同一块内存),当p2改变时就是改变p1所指的内存里的内容
下面看看带注释的代码
public class Study_9_30_1 {
public static void main(String[] args) {
Person p1 = new Person();
p1.name="老张";
//引用的赋值是将p1所指向的对象赋值给p2;
Person p2 = p1;
//此时p1和p2指向同一块内存,所以修改p2等于修改p1
p2.name = "老李";
p1.show();//老李
p2.show();//老李
}
}
class Person{
String name;
public void show() {
System.out.println(name);
}
}
从内存的角度去理解代码比较好理解,易接受;