基础篇6:Java中switch语句的深入解析(与if+else if的性能对比)

  本文对分支结构switch应用进行了相应的测试,还对switch和if进行了相互重写,测试区别,给你一个不一样的switch理解。

switch分支结构的基础使用。
语法结构:switch(expr1)中,expr1是一个整数表达式, 整数表达式可以是int基本类型或Integer包装类型,byte,short,char都可以隐含转换为int,所以都可以,在jdk1.7后String也可以。switch 语句有至少一个 case 代码块和一个可选的 default 代码块。

switch(变量或者表达式){
       case 1:方法体1breakcase 2:方法体2breakcase 3:方法体3breakcase 4:方法体4breakdefault:
}

//练习,猜数字游戏
//要求。随机产生一个7以内的数字,与case匹配,匹配即停止。
int i=new Random().nextInt(7);
		System.out.println("随机产生的数字为"+i);
         switch (i) {
         case 1://if(i==1)
                System.out.println("匹配结果是"+i);
                break;
         case 2://if(i==2)
                System.out.println("匹配结果是"+i);
                break;
         case 3:
                System.out.println("匹配结果是"+i);
         case 4:
        	    System.out.println("匹配结果是"+i);
        	 break;
         case 5:
        	     System.out.println("匹配结果是"+i);
        	 break;
         default:
                System.out.println("匹配失败");
                break;
//当一个case成立,从这个case向后穿透所有case,包括default,
//直到程序结束或者遇到break程序才结束。
  • 进入switch结构,先比较i值与第一个case(也就是1)是否相等,然后比较第二个 case(value2)以此类推;
  • 如果相等,switch 语句就执行相应 case 下的代码块,直到遇到最靠近的 break 语句(或者直到 switch 语句末尾);
  • 如果没有符合的 case,则执行 default 代码块(如果 default 存在);
  • 如果没有 break,程序将不经过任何检查就会继续执行下一个 case;

任何表达式都可以成为 switch 的参数

public static void main(String[] args) {
		int a = 1;
		switch (++a) {//表达式可以有多种方式,但必须保证类型与case后的类型一致,必须一致
		  case 2:
		    System.out.println("匹配成功");
		    break;
		  default:
		   System.out.println("匹配失败");
		}
	}

扩展

  • 将switch结构重写成if结构
public static void main(String[] args) {
          int i=5;
		  switch (5) {
		     case 1:
		    System.out.println( "1" );break;
		     case 2:
		     case 3:
		     case 4:
		     case 5:
		    System.out.println("5");break;
		     default:
		    System.out.println( "匹配失败" );
		}
	}
  • 重写成if结构
public static void main(String[] args) {
		     int i=5;
		     if(i==1) {
		         System.out.println( "1" );
		     }
		     else if(i==2) {}
		     else if(i==3) {}
		     else if(i==4) {}
		     else if(i==5) {
		    	 System.out.println("5");
		     }else {
		    System.out.println( "匹配失败" );
		     }
		}

选择问题,以下是引用大神的原话,研究半天愣是不会,未来还需要补充,暂留
switch 的判断条件是 5 个时,性能比 if 高出了约 2.3 倍,而当判断条件的数量越多时,他们的性能相差就越大。而 switch 在编译为字节码时,会根据 switch 的判断条件是否紧凑生成两种代码:tableswitch(紧凑时生成)和 lookupswitch(非紧凑时生成),其中 tableswitch 是采用类似于数组的存储结构,直接根据索引查询元素;而 lookupswitch 则需要逐个查询或者使用二分法查询,因此 tableswitch 的性能会比 lookupswitch 的性能高,但无论如何 switch 的性能都比 if 的性能要高。

大家好,我是27岁小学生liu__peng

  2020.12.25 23:06版本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值