final修饰成员变量和局部变量的区别

昨晚12点以后,跟人讨论问题,无意中聊到了final可以修饰的类型以及修饰后所具备的特点,可以详见
java基础问题101问(javaSE阶段知识汇总)
聊到final修饰成员变量和局部变量有什么区别时,只是隐约记得大概,没有十足把握,于是进行论证

先告知论证结果

final修饰成员变量和局部变量
1.都不能被改变,也就是不能被二次赋值。引用类型是地址值不能被改变,对象中的属性可以改变
2.成员变量在声明时必须被赋值,局部变量声明时可以不赋值,当局部变量被第一次赋值以后,不能二次赋值

论证

在这里插入图片描述

在这里插入图片描述

局部变量补充

final修饰的局部变量,会给人一种延长生命周期的错觉,这是在方法中有内部类的情况下,因为局部变量在方法调用一次后就死亡了,内部类对象在没有引用指向后才死亡,所以会有内部类对象还在,局部变量已死的情况,这时内部类怎么访问它所在方法的局部变量呢?
实际上是局部变量在方法调用一次后就死亡了,但是final修饰的局部变量会在内部类对象中拷贝一份,所以内部类对象访问的是拷贝给它的副本,已经成为它的成员了。
在这里插入图片描述

可以看下别人的博客解释,链接,要是没有耐心就直接看我的总结

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值