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

Java 21新模式匹配Switch语句为何比常规if-else慢?

Java 21模式匹配Switch与if-else的性能对比疑问

我做了一个简单测试,用Java 21新的模式匹配Switch语句实现分支逻辑:

long startTime = System.nanoTime();

Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
startTime = System.nanoTime();

switch (input) {
    case null -> System.out.println("null");
    case "a", "b" -> System.out.println("a or b");
    case "c" -> System.out.println("c");
    default -> System.out.println("default");
}
System.out.println("Time taken: " + (System.nanoTime() - startTime) / 1_000_000 + "ms");

测试输出通常为:Time taken: 28ms

换成等价的if-else语句测试:

if (input == null) {
    System.out.println("null");
} else if (input.equals("a") || input.equals("b")) {
    System.out.println("a or b");
} else if (input.equals("c")) {
    System.out.println("c");
} else {
    System.out.println("default");
}

输出为:Time taken: 0ms

尽管实际场景中20ms的差异影响不大,但我想确认:这种模式匹配Switch语句是否确实比if-else慢?


补充说明

单次测试的结果不能直接判定性能优劣,核心原因有两点:

  1. JVM即时编译(JIT)优化:首次执行代码时,JVM尚未对热点代码做编译优化。模式匹配Switch的字节码实现逻辑相对复杂,初期执行可能存在额外开销;而if-else逻辑简单,更容易被快速处理。
  2. 测试环境干扰:单次运行的时间受系统负载、JVM初始化状态等因素影响较大,多次重复测试后,两者的性能差异会显著缩小,甚至在JVM完成热点优化后趋于一致。

内容的提问来源于stack exchange,提问作者Andrei

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:17:05