内部类访问局部变量为什么要加final

在内部类中访问局部变量,编译器实际上会为该内部类创建一个成员变量,
以及带有参数的构造方法,然后将该变量传入构造方法,也就是说外面的
变量和类里面的变量就是名字相同而已,此时你无论修改哪一个都对另外
一个不产生影响,这样就出现矛盾了,防止这种现象就规定只准用final
你可以自己定义构造方法然后传进去,就没必要定义final变量
成员变量的话实际上内部类访问就是用类似于Test.this.xxx的形式访问
跟类信息或者对象信息有关的,修改哪一个都会造成变量值的修改,就不存在上面的那种矛盾了

内部类在使用局部变量的时候为什么要创建一个改局部变量的拷贝呢?
原因就是:局部变量在方法结束后生命周期就结束了,
但是内部类的对象却不是,所以内部类中使用局部变量的话,就需要改变量的一份拷贝。
但是既然是拷贝,就会出现两边值(局部变量和局部变量的拷贝)不一致的情况
,所以要确保同步最直接的方法就是不对该变量做修改,最终的结果就是你的疑问了,
“内部类引用局部变量为什么要求必须是final的”。
当然了“全局变量”(你的意思应该是 实例变量 )的生命周期比局部变量相对要长,
不会出现该问题,也就不需要拷贝,当然也就不需要强制为final来确保值同步了
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

久梦歌行

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

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

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

打赏作者

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

抵扣说明:

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

余额充值