为什么很多人用  if...else..if   而不使用   switch

1,if...else...if

  只是单纯地一个接一个比较;if...else可能每个条件都计算一遍;
2,switch

使用了Binary Tree算法;绝大部分情况下switch会快一点,除非是if-else的第一个条件就判断到了。

编译器编译switch与编译if...else...不同。不管有多少case,都直接跳转,不需逐个比较查询;switch只计算一次值,然后都是test , jmp,

有很多else if的时候,用switch case比较清晰!

switch使用查找表的方式决定了case的条件必须是一个连续的常量。而if-else则可以灵活的多。

所以,只有分支比较少的时候,if效率比switch高,因为switch有跳转表。

分支比较多,当然选择switch比较好。

部分节选自知乎作者:非著名程序员

switch 和 if...else if 的区别的更多相关文章

  1. if else if,switch case二者的联系与区别

    前段时间在学习中听到了一个关于条件判断语句的问题,分析if else if语句和switch case语句这两者之间的联系和区别,从而使用其中最有效率的一种方法. 一.if...else if if. ...

  2. 循环内的switch中break和continue使用区别

    首先看下break和continue的使用方法. break语句在循环和switch语句中使用,用于终止最近的封闭代码块,如果在嵌套循环中,则只终止最近的循环. continue语句在循环中使用,不能 ...

  3. if选择语句与switch选择语句的比较、区别及应用场景

    if选择语句和switch选择语句的比较: 1.switch语句只支持常量值相等的分支判断,而if语句支持更为灵活,任意布尔表达式均可: 2.switch语句通常比一系列嵌套if语句效率更高:逻辑更加 ...

  4. robot framework 关键字Switch Browser和Select Window的区别

    Switch Browser针对的是2个Open Browser以上的切换:Select Window针对的是1个Open Browser里面某个点击事件打开了另外一个新窗口 1.例子 Switch ...

  5. Java中的Switch用法

    一.java当中的switch与C#相比有以下区别 注:在java中switch后的表达式的类型只能为以下几种:byte.short.char.int(在Java1.6中是这样),   在java1. ...

  6. 20160422 --Switch…case 总结; 递归算法

    13 2016-04-22  11:01:00 Switch…case 总结(网摘) 例题: Console.WriteLine("1.汉堡包"); Console.WriteLi ...

  7. 浅谈Java中switch分支语句

    前言: 在程序中遇到多分支选择的时候,想必大家都喜欢用if...else if...else...语句,尤其是初学者,因为在了解switch语句之前,我也是只会用if...else语句.那么现在看完这 ...

  8. switch...case...语句分析(大表跟小表何时产生)

    一.switch...case...的格式 switch(表达式) { case 常量表达式1: 语句; break; case 常量表达式2: 语句; break; case 常量表达式3: 语句; ...

  9. 面向过程 vs 面向对象

    从网上摘录了一些面向过程vs.面向对象的分析,先简单记录如下,稍后会继续整理. 为什么会出现面向对象分析方法? 因为现实世界太复杂多变,面向过程的分析方法无法实现. 面向过程 采用面向过程必须了解整个 ...

随机推荐

  1. hadoop HDFS文件系统的特征

    hadoop HDFS文件系统的特征 存储极大数目的信息(terabytes or petabytes),将数据保存到大量的节点当中.支持很大单个文件. 提供数据的高可靠性,单个或者多个节点不工作,对 ...

  2. mpvue 小程序应用拖动排序

    <template> <div> <div style="width:90%;height:40px;line-height:40px;margin:auto; ...

  3. [Leetcode]014. Longest Common Prefix

    public class Solution { public String longestCommonPrefix(String[] strs) { if(strs == null || strs.l ...

  4. day35 数据库的初步认识

    一.    数据库的由来分类 1.   数据库的概念 百度定义: 数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增.截取.更新.删除等操作. 所谓“数据库”系 ...

  5. Go语言基础之21--反射

    一.变量介绍 1.1 变量的内在机制 A. 类型信息,这部分是元信息,是预先定义好的:比如:string.int等 B. 值类型,这部分是程序运行过程中,动态改变的:比如:是变量实例所存储的真是的值. ...

  6. nginx -s reload "/alidata/server/nginx/logs/nginx.pid" failed

    [root@snoopy :: vhosts]# nginx -s reload nginx: [error] open() : No such file or directory) 修改完nginx ...

  7. oracle数据库的备份与还原

    转自:https://www.cnblogs.com/ylldbk/p/5613365.html 数据导出: 1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daoc ...

  8. getElementsByTagName() 兼容性

    写东西的时候用到了getElementsByTagName(),我一直以为js 写的东西是不会有兼容性的,这次在ie8下,getElementsByTagName()就不支持了,那怎么办呢,我就查到一 ...

  9. Troubleshooting ORA-201 and ORA-202 Error

    ---- 3. When lowering the value of COMPATIBLE: You cannot start the database with lower compatibilit ...

  10. vue router-link 添加在定义事件

    在vue学习中遇到给router-link 标签添加事件@click .@mouseover等无效的情况 我想要做的是v-for遍历出来的选项卡, 鼠标移上去出现删除标签,移除标签消失的效果 原代码: ...