对象内存图

多个对象指向相同

new 出来的 s1 就是一个地址值

1. 首先,main()方法被加载到栈内存。(图1)

图 1

2.创建第一个对象。在mian方法中出现 s1;new Student() 就会在堆内存中出现,name 和 age 对应的默认值分别为 null 和 0;它的地址值是001,赋值给 s1,s1 通过 001 就指向堆内存这块地址。(图2)

图 2

3.   s1.name = "林青霞";
这里修改了 s1 对应的name值为:林青霞同理, s1.age = 30;  把age 对应的值修改为30       (图 3)

图 3

4. 第一次输出的时候。
s1 通过 栈内存的 001 指向 堆内存的 001.
name 和 age 的值分别是:林青霞 和 30
做一个拼接,在控制台输出    (图 4)

图 4

5.  Student s2 = s1;
左边 Student s2 会出现在 main方法中,把s1的值赋值给s2,s2和s1的值是相同的  001  ,都指向 堆内存 001 这块内存空间(图 5)

图 5

6. 通过 s2 修改name 的值为 张曼玉,s2 通过001指向堆内存的001 ,修改 name 的值  (图 6)
 通过 s2 修改 age 的值为 28,s2 通过001指向堆内存的001 ,修改 age 的值(图 7)

图 6
图 7

7. 最后输出 s1和s2 时,s1、s2都是001 指向相同的堆内存地址,他们的数据内容是相同的(图 8),所以在控制台看到,输出通过 s1、s2 访问结果 是相同的(图 9)

图 8
图 9

当两个对象指向相同,也就是它的地址值相同时,其中一个对象修改了堆内存的内容,另一个对象去访问时,内容也是修改过的

8. 接着往下执行, main方法就从栈内存消失了

图 9



成员变量和局部变量

1. 什么是成员变量和局部变量

成员变量:类中方法外的变量

局部变量:方法中的变量 (方法形参位置的变量也是局部变量)

2. 成员变量和局部变量区别

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容