Lambda表達式提示變量錯誤:Variable used in lambda expression should be final or effectively final...
註釋掉第二行就OK。
分析:根據語法,變量必須爲final,但是 a 已經被修改了。
爲什麼 Lambda 表達式(匿名類) 不能訪問非 final 的局部變量呢? 因爲實例變量存在堆中,而局部變量是在棧上分配,Lambda 表達(匿名類) 會在另一個線程中執行。如果在線程中要直接訪問一個局部變量,可能線程執行時該局部變量已經被銷燬了,而 final 類型的局部變量在 Lambda 表達式(匿名類) 中其實是局部變量的一個拷貝。
當然以上情況是在 Lambda 裏不在改變值的情況下,如果需要改變值,或者試試還有一種辦法就是將整個局部變量聲明在 Lambda 裏面。