if和switch的区别:spa
1、语句的格式:code
if/else的写法格式以下:blog
int nA, nB; scanf_s("%d", &nA); //输入整数并赋值给变量a scanf_s("%d", &nB); ("%d", &nB); //输入整数并赋值给变量b if (nA > nB) { printf("%d greater than %d", nA, nB); } else { printf("%d smaller than %d", nA, nB); }
swith/case的写法以下:it
int nA, nB; scanf_s("%d", &nA); //输入整数并赋值给变量a nB = nA + 1; switch (nA) { case 1: printf("when A is %d, B is", nA, nB); case 2: printf("when A is %d, B is", nA, nB); default: printf("when A is %d, B is", nA, nB); }
2、逻辑结构:class
从上面if/else与switch/case格式的区别能够看出:效率
A: if/else能根据逻辑判断输出相应的语句,也就是说if/else更多的是进行逻辑判断;变量
switch/case从某种角度上来讲,没有相应的逻辑比较判断,而是根据给出项跳转到相应的分支;数据类型
B: if判断相应的逻辑语句,返回true/false,每条if语句都会执行一次逻辑判断;float
switch/case会创建相应的跳转表,根据跳转表的项跳转到相应的分支。数据
3、效率
从两种语句的判断上能够看出:
A: 从某种程度上,Switch/case比if/else的效率要高,除非if/else在第一次逻辑判断就为true;
B: Switch/case须要创建一张跳转表,所以须要必定的空间的,更像是以空间换效率。
C: if/else能进行逻辑判断,而Switch不行,所以在须要进行逻辑判断时使用if/else语句;
4、支持的数据类型
Switch/case只支持部分数据类型:int、long和枚举类型,因为byte、short、char均可以隐含转换为int,所以:switch支持的数据类型为:byte、short、char,int、long和枚举类型,不支持:boolean、float、double;
if/else支持更多的数据类型,如String, double等;
建议:在能用Switch/case的状况下,尽可能用Switch/case来提升效率;