先定义一个Person类

public class Person {

String name;

int age;

void say(){

System.out.println("姓名:"+name+" 年龄"+age);

}

}

public class Demo01 {

public static void main(String[] args) {

Person p1=new Person();

Person p2=null;

p2=p1;

p1.name="张三";

p1.age=50;

p2.name="李四";

p2.age=80;

p1.say();

p2.say();

}

}

输出结果为:

1

原因为:执行p2=p1,p1的值赋给p2,p2先断开其刚才在堆内存中开辟空间的连接,再p2与p1所开辟的空间连接 ,p1、p2指向堆内存中的同一个空间,然后p2设置新值,覆盖原值。画图表示为:

4

 

 

public class Demo01 {

public static void main(String[] args) {

Person p1=new Person();

Person p2=null;

p2=p1;

p1.name="张三";

p1.age=50;

p1.say();

p2.name="李四";

p2.age=80;

p2.say();

}

}

输出结果为:

 

2

程序中先执行p2=p1,p1的值赋给p2,p2先断开其刚才在堆内存中开辟空间的连接,再p2与p1所开辟的空间连接,p1、p2指向堆内存中的同一个空间。

执行p1.say(),输出张三的信息。

5

P2设置新值,覆盖原值,再执行p2.say()输出李四的信息

7