内部类的变量为什么必须加final

因为生命周期不同,局部变量会在方法结束以后会被销毁,这样会导致内部类引用了一个不存在

的变量,这就前后矛盾了

所以编译器会在内部类中生成一个局部变量的拷贝,这个拷贝的生命周期与内部类的对象相同,就不会出现上述的问题

但是这样一来就导致了其中一个变量被修改,两个变量值可能会不同的问题,为了解决这个问题,编译器就要求局部变量需要把final修饰,以保证两个变量的值相同。

在JDK8之后,编译器不要求内部类访问的局部变量必须被final修饰,但是局部变量的值不能被修改(无论是方法中还是内部类中),否则编译器会抱编译错误利用java查看编译后的字节码可以发现,编译器已经加上了final;

猜你喜欢

转载自www.cnblogs.com/wanggang1987/p/12081452.html
今日推荐