為什麼局部內部類所用的變量要用final修飾,網上有很多說法,有說內部類,與局部變量生命周期的,
final的原因:內部類對象的生命周期會超過局部變量的生命期。局部變量的生命期:當該方法被調用時,該方法中的局部變量在棧中被創建,當方法調用結束時,這些局部變量消失。但是內部類對象的生命期與其它類一樣,當創建一個該局部類對象後,只有當所有引用都斷開時,才會消失。
但是如果局部內部類的對象訪問其所在方法的局部變量,只要局部內部類對象還活著,棧中的那些在內部類還引用著的局部變量就不能消失,換句話說:局部變量的生命期至少等於或大於局部內部類對象的生命期——與上面完全互相矛盾。解決的辦法:局部內部類的對象可以訪問其所在方法中的局部變量,但是這個變量必須被定義為final.因為final修飾後,若在內部類訪問了其所在方法中的該局部變量,編譯器會在內部內中保存該局部變量的一份copy,但是copy後,兩邊其實都是一個東西,為了防止其中之一被修改,造成混亂,干脆讓該變量為只讀的。即使外部變量已經消失,copy還是存在的,且不會混亂。