內部類的變量為什么必須加final


因為生命周期不同,局部變量會在方法結束以后會被銷毀,這樣會導致內部類引用了一個不存在

的變量,這就前后矛盾了

所以編譯器會在內部類中生成一個局部變量的拷貝,這個拷貝的生命周期與內部類的對象相同,就不會出現上述的問題

但是這樣一來就導致了其中一個變量被修改,兩個變量值可能會不同的問題,為了解決這個問題,編譯器就要求局部變量需要把final修飾,以保證兩個變量的值相同。

在JDK8之后,編譯器不要求內部類訪問的局部變量必須被final修飾,但是局部變量的值不能被修改(無論是方法中還是內部類中),否則編譯器會抱編譯錯誤利用java查看編譯后的字節碼可以發現,編譯器已經加上了final;


免責聲明!

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



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