java笔记
当我们通过 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回收