gpt4 book ai didi

java - java 类文件中的 lambda 代码在哪里?

转载 作者:行者123 更新时间:2023-12-01 17:50:48 24 4
gpt4 key购买 nike

我有这个java源文件:

import java.util.function.*;
public class t {
public static void main(String[] args) {
Function<Integer,Integer> r = (a) -> a*a+2*a+1;
System.out.println(r.apply(2));
}
}

我编译了它,它按预期工作。 Herejavap -c -v t的输出,我在其中找不到lambda的位置。每当调用 lambda 时,告诉 jvm 使用输入 Integer 计算表达式的字节码在哪里?

最佳答案

如果您想查看 lambda 主体的代码 a*a+2*a+1,您应该调用 javap -c -v -p t 来查看还有私有(private)方法:

private static java.lang.Integer lambda$main$0(java.lang.Integer);
descriptor: (Ljava/lang/Integer;)Ljava/lang/Integer;
flags: ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
Code:
stack=3, locals=1, args_size=1
0: aload_0
1: invokevirtual #7 // Method java/lang/Integer.intValue:()I
4: aload_0
5: invokevirtual #7 // Method java/lang/Integer.intValue:()I
8: imul
9: iconst_2
10: aload_0
11: invokevirtual #7 // Method java/lang/Integer.intValue:()I
14: imul
15: iadd
16: iconst_1
17: iadd
18: invokestatic #4 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
21: areturn
LineNumberTable:
line 4: 0

关于 lambda 内部实现的更详细答案在这里:How will Java lambda functions be compiled?

关于java - java 类文件中的 lambda 代码在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50370864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com