Java 17中循环内Lambda表达式会定义多少个类?
关于Java 17中循环内Lambda表达式的类创建数量问题
这段代码只会创建1个类,不会因为循环执行3次而生成3个类,原因如下:
- Lambda表达式在Java中的实现机制和匿名内部类不同:匿名内部类是编译期就生成独立的
.class文件,而Lambda是通过invokedynamic指令在运行时动态生成调用点,其底层的实现类会被JVM复用。 - 你代码中的Lambda每次循环的逻辑完全一致(都是返回
j+2),捕获的变量j虽然值不同,但类型都是int,属于同一种捕获场景。JVM会识别这种重复的Lambda定义,只生成一个实现类来复用,不会每次循环都创建新类。 - 只有当Lambda的逻辑不同,或者捕获的变量类型/捕获方式存在差异时,JVM才会生成不同的实现类,这个例子显然不满足这类情况。
附上你的代码:
public interface AI { int f(); } public class Main { public static void main(String[] args) { AI ai; for(int i = 0; i < 3; i++) { int j = i; ai = () -> j + 2; } } }
内容的提问来源于stack exchange,提问作者TYC
相关产品推荐
相关产品推荐

