主要有两方面原因:
一、如果局部变量不是final类型的,会造成内部类对象访问一个不存在的局部变量的结果。
造成这种结果的根本原因是作用域中变量的生命周期导致的。
局部变量的生命周期和局部内部类的对象的生命周期不一致!
比如在方法f()中存在局部变量i和内部类InnerClass,并且创建InnerClass的对象innerObject,对象innerObject中调用变量i,当方法f()运行结束后,变量i死亡了,但是内部类的对象innerObject依然存在,这时就会产生一个结果:内部类对象innerObject中要访问一个已经不存在的变量i。
二、为了保持外部类中的局部变量和内部类访问时的一致性。
内部类中访问外部变量是使用的一种copy local variable的方式,即把定义为final的变量拷贝过来用,如果不是final类型,当外部方法改变原始局部变量,而内部类改变复制品时,就不能保证数据的一致性了。 |