局部變量
局部變量是存儲在棧上的,而棧上的內容在當前線程執行完成之后就會被GC回收掉。
lambda表達式
lambda表達式最終被處理為一個額外的線程去執行。絕對不是上面提到的線程。如果上面的線程執行完了,而這個線程又使用到了上面提到的局部變量會出現錯誤。
為什么 Lambda 表達式(匿名類) 不能訪問非 final 的局部變量呢?因為實例變量存在堆中,而局部變量是在棧上分配,Lambda 表達(匿名類) 會在另一個線程中執行。如果在線程中要直接訪問一個局部變量,可能線程執行時該局部變量已經被銷毀了,而 final 類型的局部變量在 Lambda 表達式(匿名類) 中其實是局部變量的一個拷貝。
