Java 中 if/else 与 switch 语句的相对性能差异是什么?

担心我的Web应用程序的性能,我想知道“if/else”或switch语句中的哪一个在性能方面更好?


答案 1

我完全同意过早优化是要避免的观点。

但是Java VM确实具有可用于switch()的特殊字节码。

请参阅 WM 规范查找开关表开关))

因此,如果代码是性能 CPU 图的一部分,则可能会有一些性能提升。


答案 2

这是微观优化和过早优化,这是邪恶的。而是担心所讨论代码的可读性和可维护性。如果有两个以上的块粘合在一起或其大小是不可预测的,那么您可能会高度考虑一个语句。if/elseswitch

或者,您也可以抓取多态性。首先创建一些接口:

public interface Action { 
    void execute(String input);
}

并掌握某些.您可以静态或动态地执行此操作:Map

Map<String, Action> actions = new HashMap<String, Action>();

最后用类似这样的东西替换 or(将像 nullpointers 这样的琐碎检查放在一边):if/elseswitch

actions.get(name).execute(input);

可能比 或 更微低,但代码至少可以更好地维护。if/elseswitch

当你谈论web应用程序时,你可以使用HttpServletRequest#getPathInfo()作为操作键(最终编写更多的代码来在循环中拆分pathinfo的最后一部分,直到找到一个操作)。你可以在这里找到类似的答案:

如果您担心 Java EE Web 应用程序的性能,那么您可能会发现本文也很有用。还有其他一些领域比仅(微)优化原始Java代码提供了更多的性能提升。


推荐