为啥内部类使用的局部变量必须是final而全局变量可以是no-final

为什么内部类使用的局部变量必须是final而全局变量可以是no-final

  

    原因在于局部变量和全局变量的区别。 一个全局变量的生命周期伴随该类对象一直存在, 所以可以被内部类所引用。 但是, 一个局部变量的生命周期仅限于方法内部, 而且编译器对它们的处理不一样。 因为内部类隐式复制变量作为它的参数, 如果没有将局部变量声明为final, 则变量一旦被改变, 由于内部类还在引用原始的变量从而导致不易发现的错误。


    原文:*