java中 若有多个判断条件 switch比if效率更高
2016-12-20 16:31
225 查看
刚刚也就个人想了解下,在此整理下两者之间的对比及效率更优的原因
两者对比:
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。
两者对比:
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。
相关文章推荐
- java题目:求 1+2+...+n,要求不能用除法、 for、 while、 if、 else、 switch、 case 等关键字及条件判断语句( A?B:C)。
- 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。Java实现
- 剑指Offer(Java版): 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
- 题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
- 题目:求1+2+…+n, 要求不能使用乘除法、for、while、if、else、switch、case 等关键字以及条件判断语句
- 求1+2+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A? B:C)
- 求1+2+3+...+n,要求不能使用乘除法,for,while,if,else,switch,case等关键字以及条件判断语句
- Java实现乘法表,switch注意事项,if判断,判断字符串中文个数
- 【九度1506】求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
- Interview----求 1+2+...+n, 不能用乘除法、for、while if、else、switch、case 等关键字以及条件判断语句 (A?B:C)
- 题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
- 求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)
- C语言与或非位运算 Java判断中 if条件
- 每天学习一算法系列(12) (求1+2+…+n,不能使用乘除法,for、while、if 、else、switch、case 等关键字以及条件判断语句)
- 求1+2+…+n, 要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
- 求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)
- Java基础--->08.判断语句(if、else if、switch、while、do while)。
- 求1+2+3+...+n,要求不能使用乘除法,for,while,if,else,switch,case等关键字以及条件判断语句
- 黑马程序员-------java中if和switch条件语句小结
- 求1+2+…+n 要求不能使用 乘 除 法、for、while、if、else、switch、case等关键字以及条件判断语句