java lambda 表达式为什么局部变量必须是final

本文探讨了Java Lambda表达式对局部变量的限制规则,解释了为何局部变量需被视为final,并讨论了这一规则对实例变量及静态变量的不同影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java lambda 表达式为什么局部变量必须是final

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangjingao/article/details/122732331

此文章仅为我自己笔记, 故比较简洁, 也为抛砖引玉, 欢迎指点

结论

1、lambda对于实例变量、静态变量不限制
2、对于局部变量限制,必须是final类型, 即使没有声明为final类型, 后续这个变量也不可以被改变, 如果是引用类型的属性的值,或者是list这种的增删可以,但重新赋值整个对象也不行.

原因

   局部变量有一个特点, 存在于局部变量表中, 属于线程私有, 不共享. 随着作用域的结束, 可能会被内存回收.
   lambda是匿名内部类, 如果和主线程运行时使用了不同的线程, 那么很有可能在主线程结束后, 局部变量已经销毁, 或者发生了更改, 那么就会导致实际使用和真实的是不一致的.
  我理解正因为如此, 实例变量或者静态变量存放在堆中, 线程共享, 因此不受这个限制.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值