刚刚也就个人想了解下,在此整理下两者之间的对比及效率更优的原因
两者对比:
1、两者都是条件比较语句,但是IF的比较范围更广,IF能处理所有的boolean类型的结果值,switch只能处理byte、short、int类型的数值比较。
2、两者都是在匹配后执行代码块,IF会按顺序执行直到匹配正确条件,执行完该代码块,后续不加选择跳出,switch则是从匹配代码块处开始往下执行,只有遇到break才跳出,否则执行到最后。
switch比if效率更优原因:
首先,我们都知道switch只能进行整型数值判断,既然是整形那么这里的问题就来了,我们知道,一般的局部变量都存储在堆栈里面,当我们要进行运算的时间读入了寄存器,
那么对于多个数值的比较,如下:
(1)、IF说明:
int a =10;
if(a==1){}elseif(a==2){}elseif(a==10){}else{} 这段代码,对于a,在每次比较时,都会把a从堆栈中读入寄存器,直到匹配a==10,这样会造成多次读入,而寄存器不会识别这是同一个变量,造成运行过程中的资源浪费。
(2)、switch说明:
int a =10;
switch(a){case 1: break; case 2:break;case 10:break;default:;} 这段代码,中,swith最开始会将整个switch中的比较参数加载到内存,在我们传入参数a的时候,只需要读取一次a变量,然后直接匹配内存中的变量10所在地址,减少了匹配中进行比较的次数,用内存空间代价换区时间效率,同时在加载变量时也减少了资源的浪费。
综上,在使用明确数值比较的条件语句时,从效率跟时间上,switch效率要优于if。
【千里之行始于足下,每天一点点】