lambda 和 匿名内部类的区别
前言
Lambda表达式似乎只是为了简化匿名内部类书写,这看起来仅仅通过语法糖在编译阶段把所有的Lambda表达式替换成匿名内部类就可以了。但实时并非如此。在JVM层面,Lambda表达式和匿名内部类有着明显的差别。
匿名内部类实现
匿名内部类仍然是一个类,编译后会产生一个 class 文件
Lambda表达式实现
1 |
|
反编译代码可以看出来Lambda表达式被封装成了主类的一个私有方法,并通过invokedynamic指令进行调用。
注意 this
这样 lambda 里使用 this 和在类外面使用是一致的
lambda 和 匿名内部类的区别
http://xxpain.github.io/2021/11/09/lambda/