java中if和switch哪个效率快

首先要看一个问题,if 语句适用范围比较广,只要是 boolean 表达式都可以用 if 判断;而 switch 只能对基本类型进行数值比较。两者的可比性就仅限在两个基本类型比较的范围内。
说到基本类型的数值比较,那当然要有两个数。然后重点来了——
if 语句每一句都是独立的,看下面的语句:
if (a == 1) ...
else if (a == 2) ...
这样 a 要被读入寄存器两次,1 和 2 分别被读入寄存器一次。于是你是否发现其实 a 读两次是有点多余的,在你全部比较完之前只需要一次读入寄存器就行了,其余都是额外开销。但是 if 语句必须每次都把里面的两个数从内存拿出来读到寄存器,它不知道你其实比较的是同一个 a。
于是 switch case 就出来了,把上面的改成 switch case 版本:
switch (a) {
        case 0:
                break;
        case 1:
}

因为特定的规则,他一开始就知道你要比 a,于是 a 一次性读取,相比 if 节约了很多开销。

然后根据大量的实际程序测试(不考虑不同的编译器优化程度差异,假设都是最好的优化),那么Switch语句击中第三个选项的时间跟if/else if语句击中第三个选项的时间相同。
击中第一,第二选项的速度if语句快,击中第四以及第四之后的选项的速度switch语句快。

所以,如果所有选项出现概率相同的话,结论就是:5个选项(包括default)的情况下,switch和if/else if相同。低于5个选项if快,高于5给选项switch快!

时间: 2024-10-25 16:22:37

java中if和switch哪个效率快的相关文章

java中String和StringBuffer哪个效率高

大多数的网站以及多数的java书上都会说使用StringBuffer类进行字符串"连接"操作是比String类进行连接操作的效率高的,那么真的是这样吗?在这里我们实际自己测试一下,看看他们两个到底谁的效率高,然后从反编译的代码解释原因. 在我的这篇博客:<Java中 "abc" + '/'和"abc" + "/"的区别>中提到了String类的'+'操作是依赖于StringBuilder类的,而JDK API文档中

java中int-&gt;String 3种方式效率分析

1.0 int转String方式 java中,int转String共有如下3种方式 (1) 字符串拼接(即num+"") (2) String.valueof(num) (3) Integer.toString(num) 其中,方法(2)内部直接调用了方法(3),效率相差无几 2.0 效率测试 1 int[] intArr = new int[1000000]; 2 String[] strArr1 = new String[1000000]; 3 4 Long s0 = System

说说Java中你不知道switch关键字的奥秘

Switch语法 switch作为Java内置关键字,却在项目中真正使用的比较少.关于switch,还是有那么一些奥秘的. 要什么switch,我有if-else 确实,项目中使用switch比较少的一个主要原因就在于它的作用能被if-else代替,况且switch对类型的限制,也阻碍了switch的进一步使用. 先看看switch的语法: switch(exp){ case exp1: break; case exp2: break; default: break; } 其中exp的类型限制为

java中的字符串简介,字符串的优化以及如何高效率的使用字符串

简介 String最为java中最重要的数据类型.字符串是软件开发中最重要的对象之一,通常,字符串对象在内存中总是占据着最大的空间块.所以,高效处理字符串,将提高系统的整个性能. 在java语言中,String对象可以认为是char数组的衍生和进一步的封装.它的主要组成部分是:char数组.偏移量和string的长度.char数组表示string的内容,它是string对象所表示字符串的超集.String的真实内容还需要偏移量和长度在这个char数组中进一步定位和截取.(查看java源代码可以看

JAVA中的语法总结

1.在java中,不能再嵌套的两个语句中定于两个重名的变量. 例:{ int a = 4;        { int a = 3; int c =  a; } } 在java中,不会如c语言中的那样,就将a为3的值赋值给c,他会报错. 2.在java中,对于switch .....case 语句,在JDK6.0及之前,case 后的值只能是byte .short. int. char型.对于之后的JDK,他的值可以为string. 3.在java中,char类型的数据是无符号类型的数据,他占2个

Java中的枚举类型

枚举类型可以限定只能取特定值中的某一个. 这个是在编译器就可以限定的. 记住一个原则,错误越早发现越好,尽量在编译器发现. 枚举使用enum(小写)关键字 是java.lang.Enum类型,since jdk1.5 语法 public enum MyColor { red, green, blue };//限定了,用户如果要使用MyColor类型的话,就只能呢使用red,green或者blue三者之一. { MyColor m = MyColor.red; switch(m) {//枚举类型的

java中switch的使用及思维梳理

java中有两个经常用于条件判断的方法,一个是if{}else{},另一个就是switch()了.总的来说因为switch可以直接一对一满足条件,不满足条件的情况是不会执行的的所以switch的效率会相对if{}else{}更高一些,而且这两个方法是可以无门槛互换的. switch的使用: 能用于switch判断的类型有:byte.short.int.char(JDK1.6),还有枚举类型,但是在JDK1.7后添加了对String类型的判断 case语句中少写了break,编译不会报错,但是会一

java中的switch用String作为条件

在开发java程序的过程中,我们遇到了条件判断首选就是switch,但是java中的switch功能不支持字符串作为条件.这时我们该怎么办呢? --使用枚举. 一.枚举简单了解 1.enum是一种数据类型. 特殊:是指在枚举中将变量的值一一列出来,变量的值只限于列举出来的值的范围内. 特殊到一般化:enmu 就是我们根据自己业务需要定义的同"String,int"相同的数据类型.同时enum也就是一种类,可以在enum中定义方法,在使用的时候就按照调用类的方式来调用. 2.定义成枚举的

java中的Switch case语句

java中的Switch case 语句 在Switch语句中有4个关键字:switch,case break,default. 在switch(变量),变量只能是整型或者字符型,程序先读出这个变量的值,然后在各个"case"里查找哪个值和这个变量相等,如果相等,则条件成立,程序执行相应的分支,直到碰上break或有switch语句结束. 有几个需要着重注意的地方. 第一,前面说了switch(变量),只能是整型和字符类型. 第二,case之后是直接的常量数值. 第三,break使得程