switch和if else的比较

if-else
只是单纯地一个接一个比较;if...else每个条件都计算一遍;

switch
使用了Binary Tree算法;绝大部分情况下switch会快一点,除非是if-else的第一个条件就为true编译器编译switch与编译if...else...不同。不管有多少case,都直接跳转,不需逐个比较查询;switch只计算一次值,然后都是test , jmp,

有很多else if的时候,用switch case比较清晰。switch使用查找表的方式决定了case的条件必须是一个连续的常量。而if-else则可以灵活的多。对于switch语句来说,起实际是使用一个跳转表实现分支结构,不需要一次进行比较每一个所需要的条件。进行比较的次数为1.但是对于if…else语句来说:最少的比较次数为1,跟switch相比,在时间方面,switch语句的执行速度比if else要快,但是在程序执行占用的空间方面,switch语句需要一张跳转表来维护。这个跳转,表的本质是一个拥有标号的数组,需要额外的存储空间,if else语句的空间效率更好一点。switch是一个很典型的空间换时间的例子。但是switch只能判断是一个指定值的数据,而不能对一个区间中的数据进行判断。这时候选择if…else语句是一个很好的选择。


switch case与if else的效率问题

switch case与if else的区别:switch case会生成一个跳转表来指示实际的case分支的地址,而if...else却需要遍历条件分支直到命中条件。


switch case的优缺点

(1)switch case的优点:

当分支较多时,用switch的效率是很高的。因为switch是确定了选择值之后直接跳转到那个特定的分支.

(2)switch case的缺点:

1.switch...case占用较多的代码空间,因为它要生成跳表,特别是当case常量分布范围很大但实际有效值又比较少的情况,switch...case的空间利用率将变得很低。

2.switch...case只能处理case为常量的情况。


if else的优缺点

(1)if else的优点:if else能应用于更多的场所以if else比较灵活。

(2)if else的缺点:if else必须遍历所以的可能值。

总结:
在选择分支较多时,选用switch…case结构会提高程序的效率,但switch不足的地方在于只能处理字符或者数字类型的变量,if…else结构更
加灵活一些,if…else结构可以用于判断表达式是否成立,比如if(a+b>c),if…else的应用范围更广,switch…case结构在某些情况下可以替代if…else结构。

 

你可能感兴趣的:(switch和if else的比较)