- 条件较多或满足条件概率高的语句靠前,if-else 比 switch 效率高。
- 条件较多或满足条件概率高的语句靠后,switch 比 if-else 效率高。
- 条件较少的情况下,编译器不会做任何优化(不优化比优化好),switch 底层汇编会出现 "cmp" 比较,效率和 if-else 相同。
- 条件较多的情况下,switch 会有算法寻址,效率比 if-else 高。
- 顺序完整的情况下,如果乱序, switch 底层优化没有任何影响。
- 顺序残缺的情况下,如果跨度不大, switch 底层优化会将所有残缺的 case 地址在内存中保存为 default 的地址。
- 顺序残缺的情况下,如果跨度较大, switch 底层优化会用一块内存以一个字节为单位来存放case 1 ~ case N。
- 顺序残缺的情况下,如果跨度很大, switch 底层就开始和 if-else 一样进行 'cmp' 比较,没必要空间换时间了。
- if-else 可以进行区间比较,switch 只能进行单个整数等值比较。