对象内存图------两个引用指向同一对象

两个引用指向同一对象

相关代码:在这里插入图片描述
运行截图:
在这里插入图片描述

代码在内存中的执行步骤和对象内存图-1,-2大致相同

重点代码解释:

12行代码:s1的地址给了s2(即两个变量指向同一块地址)

13行代码:s2.name= “李四”。将原本地址存储的张三覆盖改为了李四

14行代码:打印s1.name和s2.name

15行代码:s1=null; 此时栈内存中的变量s1与堆内存中的地址连接切断,即s1找不到在堆内存中的地址了。

16行代码:打印将会输出异常“NullPointerException”

17行代码:打印s2.name,因为s2在12行中让栈内存中变量s2指向了堆内存中的地址,所以道理上应该打印:李四。但在代码运行中遇到前面16行异常就退出运行

18行代码:s2=null; s2也找不到在堆内存中的地址了

这时堆内存中开辟的空间没有变量能找到,没有人使用成员变量了,那么堆内存中开辟的空间就成了垃圾,将会被java机制清理

JAVA垃圾回收机制:
当堆内存中,对象和数组产生的地址,通过任何方式都不能被找到后,就判定为内存中的垃圾,垃圾会被java垃圾回收器在空闲的时候自动进行清理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fy_1852003327

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值