爲何lambda中用到的局部變量須要爲final

 

局部變量spa

局部變量是存儲在棧上的,而棧上的內容在當前線程執行完成以後就會被GC回收掉。線程

 

lambda表達式變量

lambda表達式最終被處理爲一個額外的線程去執行。絕對不是上面提到的線程。若是上面的線程執行完了,而這個線程又使用到了上面提到的局部變量會出現錯誤。lambda

 

爲何 Lambda 表達式(匿名類) 不能訪問非 final  的局部變量呢?由於實例變量存在堆中,而局部變量是在棧上分配,Lambda 表達(匿名類) 會在另外一個線程中執行。若是在線程中要直接訪問一個局部變量,可能線程執行時該局部變量已經被銷燬了,而 final 類型的局部變量在 Lambda 表達式(匿名類) 中實際上是局部變量的一個拷貝。co

相關文章
相關標籤/搜索