局部变量spa
局部变量是存储在栈上的,而栈上的内容在当前线程执行完成以后就会被GC回收掉。线程
lambda表达式变量
lambda表达式最终被处理为一个额外的线程去执行。绝对不是上面提到的线程。若是上面的线程执行完了,而这个线程又使用到了上面提到的局部变量会出现错误。lambda
为何 Lambda 表达式(匿名类) 不能访问非 final 的局部变量呢?由于实例变量存在堆中,而局部变量是在栈上分配,Lambda 表达(匿名类) 会在另外一个线程中执行。若是在线程中要直接访问一个局部变量,可能线程执行时该局部变量已经被销毁了,而 final 类型的局部变量在 Lambda 表达式(匿名类) 中实际上是局部变量的一个拷贝。co