You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 11:55:55