為什么lambda中用到的局部變量需要為final


 

局部變量

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

 

lambda表達式

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

 

為什么 Lambda 表達式(匿名類) 不能訪問非 final  的局部變量呢?因為實例變量存在堆中,而局部變量是在棧上分配,Lambda 表達(匿名類) 會在另一個線程中執行。如果在線程中要直接訪問一個局部變量,可能線程執行時該局部變量已經被銷毀了,而 final 類型的局部變量在 Lambda 表達式(匿名類) 中其實是局部變量的一個拷貝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM