effectivety final的理解

midoll 457 2022-03-30
  • 匿名内部类访问局部变量时,局部变量需要加final修饰符,
  • Java8中,系统会自动加上, 但是仍然不能修改值,否则会报错
  • 原因:局部变量存储在栈中,随方法结束时会消失,而匿名内部类对象可能仍然存在,添加final修饰的变量可以在编译期确定下来,例如:final a = 10; sout(a) = sout(10);
  • 对于局部变量来说,如果是基本类型 ,会直接存储在栈,也就会出现上面说的问题,
  • 如果是引用类型,则对象是在堆中分配,引用(指针)在栈中,这时就不会出现上面的问题,
  • 也就是说,如果需要在匿名内部类中修改局部变量,可以把变量设置为引用类型,这样编译器就不会报错了。

# java8