先定義一個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();
}
}
輸出結果為:

原因為:執行p2=p1,p1的值賦給p2,p2先斷開其剛才在堆內存中開辟空間的連接,再p2與p1所開辟的空間連接 ,p1、p2指向堆內存中的同一個空間,然后p2設置新值,覆蓋原值。畫圖表示為:
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();
}
}
輸出結果為:
程序中先執行p2=p1,p1的值賦給p2,p2先斷開其剛才在堆內存中開辟空間的連接,再p2與p1所開辟的空間連接,p1、p2指向堆內存中的同一個空間。
執行p1.say(),輸出張三的信息。
P2設置新值,覆蓋原值,再執行p2.say()輸出李四的信息