第一種說法
原因
主要是因為實現(xiàn)的代價太高
困難
局部變量的生命周期和局部內(nèi)部類的生命周期不同
詳解
- 局部內(nèi)部類的生命周期是和其他類一樣的枫匾,都是當(dāng)再也沒有對象的引用的時候才會結(jié)束生命周期要门。
- 但是局部變量的作用域是不一樣的获茬,當(dāng)方法或者作用域結(jié)束的時候局部變量的生命周期就結(jié)束了
- 如果當(dāng)局部內(nèi)部類訪問一個局部變量的時候可能出現(xiàn)局部內(nèi)部類還在但是局部變量已經(jīng)被銷毀了
- 這個時候還要講到final的機制识脆,在編譯期,當(dāng)程序中某一個地方用到final類型的變量的時候缕碎,這個時候編譯器會自動在用到final類型的變量的地方拷貝一份新的final類型的變量褥影,這個新的變量是和原來的變量不在同一個內(nèi)存地址的,所以當(dāng)原本的final變量銷毀的時候這個變量還在阎曹。
- Java的作者就利用final類型變量的這個特性來解決了這個問題伪阶。