第一种说法
原因
主要是因为实现的代价太高
困难
局部变量的生命周期和局部内部类的生命周期不同
详解
- 局部内部类的生命周期是和其他类一样的,都是当再也没有对象的引用的时候才会结束生命周期。
- 但是局部变量的作用域是不一样的,当方法或者作用域结束的时候局部变量的生命周期就结束了
- 如果当局部内部类访问一个局部变量的时候可能出现局部内部类还在但是局部变量已经被销毁了
- 这个时候还要讲到final的机制,在编译期,当程序中某一个地方用到final类型的变量的时候,这个时候编译器会自动在用到final类型的变量的地方拷贝一份新的final类型的变量,这个新的变量是和原来的变量不在同一个内存地址的,所以当原本的final变量销毁的时候这个变量还在。
- Java的作者就利用final类型变量的这个特性来解决了这个问题。