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慢?
补充说明
单次测试的结果不能直接判定性能优劣,核心原因有两点:
- JVM即时编译(JIT)优化:首次执行代码时,JVM尚未对热点代码做编译优化。模式匹配Switch的字节码实现逻辑相对复杂,初期执行可能存在额外开销;而if-else逻辑简单,更容易被快速处理。
- 测试环境干扰:单次运行的时间受系统负载、JVM初始化状态等因素影响较大,多次重复测试后,两者的性能差异会显著缩小,甚至在JVM完成热点优化后趋于一致。
内容的提问来源于stack exchange,提问作者Andrei
相关产品推荐
相关产品推荐

