java switch基础
java switch基础
java中为多路分支选择流程专门提供了switch语句,switch语句根据一个表达式的值,选择运行多个操作中的一个。另一个常用的条件判断语句if else,本文重点介绍java中switch case语句的用法,但会在篇末对两种语句的区别做一个总结。
1、java switch基础语法
switch(表达式){
case 表达式常量1:语句1;
break;
case 表达式常量2:语句2;
break;
......
case 表达式常量n:语句n;
break;
default:语句n+1;
2、switch case支持的6种数据类型
switch表达式后面的数据类型只能是byte,short,char,int四种整形类型,枚举类型和java.lang.String类型(从java 7才允许),不能是boolean类型。
“switch支持byte,short,char,int 的包装类”,首先可以肯定switch不支持这些包装类,但是如下的代码又是正确的:
public static void main(String[] args) { switch (new Integer(45)) { case 40: System.out.println("40"); break; case 45: System.out.println("45");//将会打印这句 break; default: System.out.println("?"); break; } }
可以打印正确的结果,在挨着挨着试完Byte,Short,Character,Integer后发现都可以正确打印,于是便说switch也支持byte,short,char,int的包装类。这种说法不完全正确,之所以switch能够支持他们的包装类,是因为自动拆箱(从JDK1.5开始支持自动拆箱和自动装箱,自动拆箱就是自动将引用数据类型转化为基本数据类型,自动装箱就是自动将基本数据类型转化为引用数据类型)的原因。
3、Java中switch和if语句的区别
switch和if语句都是Java的选择语句,这两种语句都是允许在程序运行时控制程序的执行过程。
switch和if-else相比,由于使用了Binary Tree算法,绝大部分情况下switch会快一点,除非是if-else的第一个条件就为true。
编译器编译switch与编译if...else...不同。不管有多少case,都直接跳转,不需逐个比较查询。
相比于if-else结构,switch的效率绝对是要高很多的,但是switch使用查找表的方式决定了case的条件必须是一个连续的常量。而if-else则可以灵活的多。
switch效率高,从汇编代码可以看出来。switch只计算一次值,然后都是test。
switch的效率与分支数无关。当只有分支比较少的时候,if效率比switch高(因为switch有跳转表)。分支比较多,那当然是使用switch。
浙公网安备 33010602011771号