内部类和外部类在编译时实际上会生成两个类,outer.class和inner.class
final修饰的局部变量会在内部类对象中复制一个局部变量的副本,为了实现保持内部类访问并使用的局部变量和外部类局部变量之间的一致性,所以要求要用final来修饰局部变量,使其值不能改变。
如果局部变量是基本数据类型的,final的值不可改变,直接拷贝到内部类中;如果是引用数据类型的,则把引用拷贝到内部类对象中,因为final的引用是不可修改的,也就是说会一直存在指向同一值对象的引用,使得被引用的值对象不会被当成垃圾而回收。
这样就避免了因为内部类和外部类中因修改局部变量值、或引用对象被回收而导致产生严重的问题。
个人理解,希望高手给出更详细的回答。 |