美文网首页Java
区分lambda表达式与匿名内部类

区分lambda表达式与匿名内部类

作者: 小鸡在路上 | 来源:发表于2019-10-12 22:17 被阅读0次

    java8出来了很久了,但是java8的广泛应用到商业开发也还是这几年。用java8我想其中有一个很重要的特性就是lambda表达式。在网上看了很多人说lambda表达式其实就是匿名内部类的一种简写。因为本身自己也用了有一段时间的java8了。对于lambda表达式是匿名内部类的简写的说法做一次反驳。其实lambda表达式和匿名内部类有本质的区别。通过代码证明一下:

    public class StreamTest4 {
    
         Runnable r1 = ()->System.out.println("lambda:"+this);
    
         Runnable r2 = new Runnable() {
            @Override
            public void run() {
                System.out.println("匿名内部类"+this);
            }
        };
    
        public static void main(String[] args) {
            StreamTest4 streamTest = new StreamTest4();
            Thread t1 = new Thread(streamTest.r1);
            t1.start();
    
            Thread t2 = new Thread(streamTest.r2);
            t2.start();
        }
    }
    
    // 输出的结果:
    // lamda:com.lc.memory.StreamTest4@251b4afc
    // 匿名内部类com.lc.memory.StreamTest4$1@60f00729
    

    我们可以看到对于this 这个作用域有本质的区别 lambda表达式中 this指向的是实例对象的地址,而匿名内部类中的this 则指向的是 匿名内部类的实例地址。

    相关文章

      网友评论

        本文标题:区分lambda表达式与匿名内部类

        本文链接:https://www.haomeiwen.com/subject/mficmctx.html