终于明白为什么要加 final 关键字了!

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 终于明白为什么要加 final 关键字了!

点击上方“Java知音”,选择“置顶公众号”

技术文章第一时间送达!

作者:guanpj

www.jianshu.com/p/acc8d9a67d0c

www.jianshu.com/p/acc8d9a67d0c

现象描述****

原因分析****


class TestInnerClass$1 extends InnerClass {
    TestInnerClass$1(TestInnerClass var1, int var2, DataBean var3) {
        super(var1);
        this.this$0 = var1;
        this.val$num = var2;
        this.val$bean = var3;
    }

    void doSomething() {
        super.doSomething();
        System.out.println("num = " + this.val$num);
        System.out.println("bean name is: " + this.val$bean.name);
    }
}

情景对比****

但是为什么对于 Kotlin 来说可以在匿名内部类中直接修改基本数据类型的值呢?查看 Kotlin 编译后反编译回来的内容:


public final void useNestedClass(@NotNull final TestNestedClass.DataBean bean) {
      Intrinsics.checkParameterIsNotNull(bean, "bean");
      final IntRef num = new IntRef();//---1
      num.element = 1;//---2
      String var3 = "before action, num = " + num.element;
      System.out.println(var3);
      undefinedtype nestedClass = new TestNestedClass.NestedClass() {
         public void doSomething() {
            num.element = 678;//---3
            bean.setName("xyz");
            String var1 = "num = " + num.element;
            System.out.println(var1);
            var1 = "bean name is: " + bean.getName();
            System.out.println(var1);
         }
      };
      nestedClass.doSomething();
      String var4 = "after action, num = " + num.element;//---4
      System.out.println(var4);
   }

public final void useNestedClass(@NotNull TestNestedClass.DataBean bean) {
      Intrinsics.checkParameterIsNotNull(bean, "bean");
      int num = 1;
      String var3 = "before action, num = " + num;
      System.out.println(var3);
      int num = 678;
      var3 = "after action, num = " + num;
      System.out.println(var3);
   }

推荐阅读(点击即可跳转阅读)

1. SpringBoot内容聚合

**2. **面试题内容聚合

**3. **设计模式内容聚合

**4. **Mybatis内容聚合

**5. **多线程内容聚合

觉得不错?欢迎转发分享给更多人

终于明白为什么要加 final 关键字了!

我知道你 “在看终于明白为什么要加 final 关键字了!

原文始发于微信公众号(Java知音):终于明白为什么要加 final 关键字了!

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 终于明白为什么要加 final 关键字了!


 上一篇
巧用Java8中的Stream,让集合操作飞起来! 巧用Java8中的Stream,让集合操作飞起来!
点击上方“Java知音”,选择“置顶公众号” 技术文章第一时间送达! 作者:坚持就是胜利 juejin.im/post/5d5e2616f265da03b638b28a 简介java8也出来好久了,接口默认方法,lambda
下一篇 
StringBuilder为什么线程不安全? StringBuilder为什么线程不安全?
点击上方“Java知音”,选择“置顶公众号” 技术文章第一时间送达! 作者:千山 juejin.im/post/5d6228046fb9a06add4e37fe juejin.im/post/5d6228046fb9a06