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类型,那么在代码中修改对入参的引用后,会造成内外引用的不一致,产生预想不到的后果

posted on 2020-05-11 10:03  yytxdy  阅读(443)  评论(0编辑  收藏  举报