public class Outer { public void display(final String name) { class Inner { public void showName() { System.out.println(name); } } } }
以上述代码为例,反编译内部类的class文件
class Outer$1Inner { Outer$1Inner(Outer var1, String var2) { this.this$0 = var1; this.val$name = var2; } public void showName() { System.out.println(this.val$name); } }
可以看到内部类持有了外部类以及入参的引用,如果入参不是final类型,那么在代码中修改对入参的引用后,会造成内外引用的不一致,产生预想不到的后果
无边沉沦,苦海渡航