制作网站的最大公司,上海注册公司哪家好,湖北省建设厅官方网站,庐江建网站公司java项目中要不要废弃使用switch
先看switch是怎么产生的#xff1a;
很久以前#xff0c;计算能力很昂贵#xff0c;电脑性能很差#xff0c;人们便想着法子的提高执行效率 先看看if(test0)的处理逻辑#xff1a; 先是把test的值放在一个寄存器中#xff0c;然后把0放…java项目中要不要废弃使用switch
先看switch是怎么产生的
很久以前计算能力很昂贵电脑性能很差人们便想着法子的提高执行效率 先看看if(test0)的处理逻辑 先是把test的值放在一个寄存器中然后把0放在另一个寄存器中然后做减法然后根据结果再判断是否执行后面的语句
再看看switch的处理逻辑
switch是在编译阶段就将判断条件和子函数地址逻辑绑定了真正执行的时候直接将test映射到对应的地址中就行了。 而且break的出现是为了解决当时goto 任意一行的问题的代表本次逻辑结束 很明显break的效率确实要比if好点但再一想也没有太本质的区别无非就是提前加载么
switch优点
1、代码整洁相比if-else但也好不到哪里去 2、执行效率快点也是相比于if-else
switch缺点
1、忘记写break很容易造成bug 2、太多的break感觉代码就很冗余但不写又不行 3、局限的case判断条件
总结
那么以现在计算能力switch比if好的那点执行效率完全可以忽略不记了而且sun官方也指出对if进行过效率优化。 所以switch的优点基本被缩小到没有了而他的缺点却一直存在而且基本每个java开发者都被switch坑过。 那么我们为什么还要继续用switch呢
网友有一种说法逻辑判断多于5次就用switch少于5次就用if-else 或者另一种说法5000次以上的逻辑判断用switch执行比用if快将近一倍 对于这种说法我是这样理解的首先我们想想大段大段的逻辑判断是不是本身就有问题 我们首先应该想到的是设计问题为什么要出现这么多逻辑判断能不能规避而不是一开始就想用哪个能更快 而且java是一个面向对象的语言如果大段大段的逻辑判断那不就是过于面向过程了么这是不是又违背了java设计的初衷了呢
最后补充一点我们还有设计模式可以想办法替代掉这种大段的逻辑判断详细可以去搜搜替代ifelse的方案