多个对象指向相同
new 出来的 s1 就是一个地址值
1. 首先,main()方法被加载到栈内存。(图1)
2.创建第一个对象。在mian方法中出现 s1;new Student() 就会在堆内存中出现,name 和 age 对应的默认值分别为 null 和 0;它的地址值是001,赋值给 s1,s1 通过 001 就指向堆内存这块地址。(图2)
3. s1.name = "林青霞";
这里修改了 s1 对应的name值为:林青霞同理, s1.age = 30; 把age 对应的值修改为30 (图 3)
4. 第一次输出的时候。
s1 通过 栈内存的 001 指向 堆内存的 001.
name 和 age 的值分别是:林青霞 和 30
做一个拼接,在控制台输出 (图 4)
5. Student s2 = s1;
左边 Student s2 会出现在 main方法中,把s1的值赋值给s2,s2和s1的值是相同的 001 ,都指向 堆内存 001 这块内存空间(图 5)
6. 通过 s2 修改name 的值为 张曼玉,s2 通过001指向堆内存的001 ,修改 name 的值 (图 6)
通过 s2 修改 age 的值为 28,s2 通过001指向堆内存的001 ,修改 age 的值(图 7)
7. 最后输出 s1和s2 时,s1、s2都是001 指向相同的堆内存地址,他们的数据内容是相同的(图 8),所以在控制台看到,输出通过 s1、s2 访问结果 是相同的(图 9)
当两个对象指向相同,也就是它的地址值相同时,其中一个对象修改了堆内存的内容,另一个对象去访问时,内容也是修改过的
8. 接着往下执行, main方法就从栈内存消失了
成员变量和局部变量
1. 什么是成员变量和局部变量
成员变量:类中方法外的变量
局部变量:方法中的变量 (方法形参位置的变量也是局部变量)