匿名内部类,lambda表达式list.forEach的时候引用变量必须是final修饰

匿名内部类,lambda表达式list.forEach的时候引用变量必须是final修饰的问题。
开发中遇到过以下问题,使用list.forEach循环的时候,不能对外部变量进行操作,而且提示:
Variable used in lambda expression should be final or effectively final
意思是:lambda表达式中使用的变量应该是final或实际上是final
在这里插入图片描述
这是因为lambda表达式list.forEach也是属于匿名内部类,匿名内部类实际上也是一个对象,只不过是匿名的,只要是对象就会存放到堆里面,而JVM堆里面的对象是由GC垃圾回收负责回收的,回收的时间不确定,对象的生命周期比方法长,这个时候就要求对象未被回收前,对象里面引用的其他变量也不能消失,否则就会有问题。如果这个对象还在,里面引用的变量却消失了肯定不行,直接定义int i = 0;这个变量是随着方法的结束而消失,加上final修饰后,这个变量就会被jvm放入到常量池中,不会因为方法结束就消失,所以匿名内部类引用外部变量的时候要使用final修饰,来保证自己这个对象没有消失前,所引用的变量还在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值