证明方法:查看lambda表达式编译后的字节码
lambda简单例程:
import java.util.function.Consumer;
public class LambdaTest {
public static void main(String args[]){
Consumer<String> c= str->System.out.println(str);
c.accept("hello");
}
}
intellij查看字节码(用 -c反汇编,-p显示所有类和成员):
javap命令:
用 -c反汇编,-p显示所有类和成员,得到的字节码如下:
从private static void lambda$main$0(java.lang.String);可见lambda表达式被编译生成一个称之为lambda$main$0的私有方法
"D:\Program Files\Java\jdk1.8.0_201\bin\javap.exe" -c -p LambdaTest
Compiled from "LambdaTest.java"
public class LambdaTest {
public LambdaTest();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: invokedynamic #2, 0 // InvokeDynamic #0:accept:()Ljava/util/function/Consumer;
5: astore_1
6: aload_1
7: ldc #3 // String hello
9: invokeinterface #4, 2 // InterfaceMethod java/util/function/Consumer.accept:(Ljava/lang/Object;)V
14: return
private static void lambda$main$0(java.lang.String);
Code:
0: getstatic #5 // Field java/lang/System.out:Ljava/io/PrintStream;
3: aload_0
4: invokevirtual #6 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
7: return
}