java if switch 效率高_Java 代码优化 switch case 和 if else 语句的效率比较,使用JProfiler比下两者的效率...

代码里面写 if else 或者 switch case 语句,很常见,那么这2个写法除了姿势不一样以为,他们的效率是不是也差距比较大呢?

1,switch case 比 一个个if else快吗?

2,switch case会因为case的数据类型越简单,而使得执行效率提高不少吗?

下面测试下

75c9cbc13b393ad14a9015eeafc0cc3c.png

总体来说:2者差别不大,使用谁,代码执行效率,都没有啥质的飞跃。

有的说 switch case可以直接定位到对应的case的地方,这个“直接”,是你看到的,其实,他还是一个个的去比较的。没啥直接跳到对应case去的。那是表面现象,是你debug时候的错觉。

所以,网上的言论:

“switch case 可以快速定位到case,在使用不同的case的时候,效率比一个个if效率高”

这个是不存在的,我上面的充分的说明了问题,(有毛病的可以指出来)

测试代码如下:

package com.lxk.fast;

import com.lxk.model.enumModel.Type;

/**

* if else 和 switch case 以及 case使用枚举 的效率比较

*

* @author LiXuekai on 2019/6/21

*/

public class SwitchCaseIsFasterThanIfElse {

public static void main(String[] args) {

test();

}

private static void test() {

//9,为公平起见,都在第九个匹配

int lxk = Type.JSON.ordinal();

Type type = Type.JSON;

char aChar = '9';

while (true) {

testSwitchCaseInt(lxk);

testIfElse(lxk);

//testSwitchCaseChar(aChar);

//testSwitchCaseEnum(type);

}

}

private static void testSwitchCaseEnum(Type type) {

switch (type) {

case _INTEGER:

sameFunction();

break;

case INTEGER:

sameFunction();

break;

case _LONG:

sameFunction();

break;

case LONG:

sameFunction();

break;

case _DOUBLE:

sameFunction();

break;

case DOUBLE:

sameFunction();

break;

case _FLOAT:

sameFunction();

break;

case FLOAT:

sameFunction();

break;

case STRING:

sameFunction();

break;

case JSON:

sameFunction();

break;

case OBJECT:

sameFunction();

break;

default:

sameFunction();

}

}

private static void sameFunction() {

String lxk = "li xue kai";

}

private static void testSwitchCaseInt(int type) {

switch (type) {

case 0:

sameFunction();

break;

case 1:

sameFunction();

break;

case 2:

sameFunction();

break;

case 3:

sameFunction();

break;

case 4:

sameFunction();

break;

case 5:

sameFunction();

break;

case 6:

sameFunction();

break;

case 7:

sameFunction();

break;

case 8:

sameFunction();

break;

case 9:

sameFunction();

break;

case 10:

sameFunction();

break;

default:

sameFunction();

}

}

private static void testSwitchCaseChar(char type) {

switch (type) {

case '0':

sameFunction();

break;

case '1':

sameFunction();

break;

case '2':

sameFunction();

break;

case '3':

sameFunction();

break;

case '4':

sameFunction();

break;

case '5':

sameFunction();

break;

case '6':

sameFunction();

break;

case '7':

sameFunction();

break;

case '8':

sameFunction();

break;

case '9':

sameFunction();

break;

case 's':

sameFunction();

break;

default:

sameFunction();

}

}

private static void testIfElse(int lxk) {

if (lxk == 0) {

sameFunction();

} else if (lxk == 1) {

sameFunction();

} else if (lxk == 2) {

sameFunction();

} else if (lxk == 3) {

sameFunction();

} else if (lxk == 4) {

sameFunction();

} else if (lxk == 5) {

sameFunction();

} else if (lxk == 6) {

sameFunction();

} else if (lxk == 7) {

sameFunction();

} else if (lxk == 8) {

sameFunction();

} else if (lxk == 9) {

sameFunction();

} else if (lxk == 10) {

sameFunction();

} else {

sameFunction();

}

}

}

然后,还是有点好奇,这个case,对应不同的情况,比如使用int,或者枚举,或者char类型,这个case对应的类型越简单,效率是不是越高呢?

然后,就又有了上面代码的其他测试,注释状态的。

然后,打开注释,继续使用JProfiler监测一下,看看差别。

50347b77e292b33480e6e55667888ce9.png

83758c5726da423534249b7b67160255.png

a3d636e7135a77bcf2ba3270170043be.png

看了下,char比int简单,int比枚举简单。

但是,最终,他们的效率对比,不管使用谁,好像效率,也没啥质的飞跃。

最后,

注意一下,

每个时间占比图里面,调用的sameFunction()这个方法占用的时间并不多,

第一个图,这个方法占的比例是 15.6% / 50.6% = 30.8%

第二个图,这个方法占的比例是 9.9% / 32.9% = 30.1%

得到的理论,一个 if else 或者 switch case 在来来回回的路上,竟然耗费了70%的性能。

怎么才能把这个时间给降低点呢!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值