为何lambda中用到的局部变量须要为final

 

局部变量spa

局部变量是存储在栈上的,而栈上的内容在当前线程执行完成以后就会被GC回收掉。线程

 

lambda表达式变量

lambda表达式最终被处理为一个额外的线程去执行。绝对不是上面提到的线程。若是上面的线程执行完了,而这个线程又使用到了上面提到的局部变量会出现错误。lambda

 

为何 Lambda 表达式(匿名类) 不能访问非 final  的局部变量呢?由于实例变量存在堆中,而局部变量是在栈上分配,Lambda 表达(匿名类) 会在另外一个线程中执行。若是在线程中要直接访问一个局部变量,可能线程执行时该局部变量已经被销毁了,而 final 类型的局部变量在 Lambda 表达式(匿名类) 中实际上是局部变量的一个拷贝。co

相关文章
相关标签/搜索