Java 8語言上的lambda表達(dá)式只實(shí)現(xiàn)了capture-by-value,也就是說它捕獲的局部變量都會(huì)拷貝一份到lambda表達(dá)式的實(shí)體里,然后在lambda表達(dá)式里要變也只能變自己的那份拷貝而無法影響外部原本的變量;但是Java語言的設(shè)計(jì)者又要掛牌坊不明說自己是capture-by-value房待,為了以后語言能進(jìn)一步擴(kuò)展成支持capture-by-reference留下后路,所以現(xiàn)在干脆不允許向捕獲的變量賦值驼抹,而且可以捕獲的也只有“效果上不可變”(effectively final)的參數(shù)/局部變量桑孩。
作者:RednaxelaFX
鏈接:https://www.zhihu.com/question/28190927/answer/39786939