如题,局部内部类如果直接使用方法参数,方法参数必须为final,有的说是为了扩大生命周期,有的说是为了防止修改参数。
我快被绕晕了。这到底是为什么?????希望大神解答。

解决方案 »

  1.   

    防止修改数据感觉正确性高些
      方法实例总是在线程栈上,而对象总是在堆中。
    方法实例是暂时的,其内容是易变的;对象的生命期则相对很长,内容也比较确定:
    方法实例在每次方法被调用时产生,当方法return时即被销毁。而对象则不会在类的构造器return时被销毁,相反它会一直存在,直到被当作垃圾回收掉。由于变量的内容随时可能改变,变量创建时的值可能与方法return时的值(如果其还存在)完全不同 所以就会导致无法确定到底是哪个变量的值  解决方法便是不能变的final     嗯 我就知道这么点 
      

  2.   

    主要是内部类的和方法里的参数生命周期不一样,如果内部类用方法里的局部参数,不加final的话就可能会出现访问不到的问题,所以加个final延长参数的生命周期,使内部类在使用的时候可以访问到,不会出现访问不到的错误。同时也解决了参数被其他方法改变,使数据出现不一致的错误。也就是说为了扩大生命周期,为了防止修改参数都是成立的,只不过是从俩个角度去考虑的而已。而final的出现解决了这两个问题。
      

  3.   

    你可以反编译一下内部类的class文件,实际上编译器在内部类中创建了成员变量指向外部变量,所以如果外部变量可以修改,但是内部使用的实际上是最初赋值的那个引用,它不会跟着外部变量的修改二修改,这个就造成了不安全