先决条件 – 切换语句,决策(如果其他)
switch 语句通常比一组嵌套的 if 更有效。决定是使用 if-then-else 语句还是 switch 语句是基于可读性和语句测试的表达式。
- 检查测试表达式: if-then-else 语句可以测试基于值或条件范围的表达式,而 switch 语句仅测试基于单个整数、枚举值或 String 对象的表达式。
- 多路分支切换更好:当编译器编译 switch 语句时,它将检查每个 case 常量并创建一个“跳转表”,它将用于根据表达式的值选择执行路径。因此,如果我们需要在一大组值中进行选择,switch 语句的运行速度将比使用一系列 if-else 编码的等效逻辑快得多。编译器可以这样做是因为它知道 case 常量都是相同的类型,并且只需要与 switch 表达式比较是否相等,而在 if 表达式的情况下,编译器不知道。
- if-else 更适合布尔值: If-else 条件分支适用于产生布尔值的可变条件,而 switch 语句适用于固定数据值。
- 速度:如果案例数量良好,switch 语句可能会比 ifs 更快。如果只有少数情况,它可能不会在任何情况下影响速度。如果案例数超过 5,则首选 switch,否则,您也可以使用 if-else。
如果开关包含五个以上的项目,则使用查找表或哈希列表来实现。这意味着所有项目都获得相同的访问时间,与 if:s 列表相比,最后一个项目需要更多时间才能到达,因为它必须首先评估每个先前的条件。 - 可读性清晰:当您必须组合案例时,开关看起来更清晰。 Ifs 也很容易出错。缺少 else 语句会使您陷入混乱。使用开关也可以更轻松地添加/删除标签,并使您的代码更易于更改和维护。
最后,根据代码的需求实现更清晰、更易于维护的设计。如果您遇到一个巨大的 switch-case 或 if-else 块,请切换到其他技术,如多态。只需找出对象的行为,并在可能的情况下尝试对其进行封装。