当我们通过 Person person1 = new Person(); 语句创建一个Person对象时,会将 对象信息 存到堆中,此时 name=null;age=0;

假设上面的 “0X101” 表示保存了 person1 对象信息的堆地址,那么栈中就会保存这个堆的地址,从而指向 person1

也就是说:堆保存对象信息,栈保存堆地址

 

然后通过 person1.name=”小三”;person1.age=18; 为 person1 对象信息进行赋值

1 Person person1 = new Person();
2         person1.name = "小三";
3         person1.age = 18;

此时,我们输出 person1 

 

 

接下来,我们创建一个 person2 对象实例,Person person2 = person1;

这是,栈中会有一个 person2 的元素,其保存的堆地址也是 “0X101”,也就是与 person1 指向同一个堆地址。

 我们通过 person2 来设置 name = “竹青”   –>   person2.name = “竹青”;

此时,我们再输出 person1 

因为 person2 和 person1 指向同一个 堆地址,所以 person2 修改了name值,那么 person1 去调用 name 属性时,是修改后的值

 

 

我们接着创建一个 person3 对象实例,Person person3 = new Person();

并设置 name=”小五”;age=16;

然后让 person3 指向 person1 的地址   –>   person3 = person1;

此时, person3 原本指向的堆地址就没有被引用到,于是成为了“垃圾”,等待着GC回收

 

版权声明:本文为java-hui原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/java-hui/p/11246996.html