switch语法
代码如下 | 复制代码 |
switch(表达式) { case 常量表达式1:语句1; .... case 常量表达式2:语句2; default:语句; } |
default就是如果没有符合的case就执行它,default并不是必须的.
case后的语句可以不用大括号.
switch语句的判断条件可以接受int,byte,char,short,不能接受其他类型.
一旦case匹配,就会顺序执行后面的程序代码,而不管后面的case是否匹配,直到遇见break,利用这一特性可以让好几个case执行统一语句.
例子
代码如下 | 复制代码 |
public class SwitchDemo { public static void main(String[] args) { private static int switchTest(int key) { int value = 0; return value; 输出 : 55 |
switch-case的注意地方
下面是switch的简单写法:
代码如下 | 复制代码 |
switch(A){ case B; } |
A部分中的值必须是int型的,或者是能够自动进行饮试转换成int型的表达式。也就是说A部分可以是byte/short/char/int型的。
其次要强调的是该程序中B部分的值必须是单个byte/short/char/int型的值,或者是final型的变量。
但是final型的变量也是有要求的,也即是它必须是编译时的常量,怎么讲呢,看下面的程序段:
final int a = 0;
final int b;
第二个语句就是在编译时不能够被识别出值的变量,因为它没有初始化,当然,这条语句也是错误的。
所以总结case后的值可以是常数值或final型的值。
再看下面的程序段:
代码如下 | 复制代码 |
public class TestSwitch { public static void main(String[] args){ byte a = 11; switch(a){// C case 11 : System.out.println(" 11 "); break; case 225 : System.out.println(" 11 "); break;// D } } } |
该代码正确吗?答案是否定的。虽然在 C 处是合法的也即是byte型的a值可以出现在switch中,但是 D处的语句也即是第二个case后的值是225大小超过了byte的范围,所以是错误的。再就是case后的值不能出现重复。因此在使用中要注意。
=====================
再就是在使用switch-case中最容易忽视的就是忘记在每个case后处理完后忘记写上break;语句。那它带来的后果是什么呢,下面小程序段会告诉你:
代码如下 | 复制代码 |
public class TestSwitchCase { public static void main(String[] args){ byte a = 2; switch(a){ case 1 : System.out.println(" A "); case 2 : System.out.println(" B "); case 3 : System.out.println(" C "); case 4 : System.out.println(" D "); default : System.out.println(" default "); } } } =========输出结果为: B C D default |
--------------------------
看到了吗?连default都执行,注意结束符break;就OK了。
case中A不能为变量
Java switch case里面的用法,由于 switch case 和 if-else 工作原理不一样,可能某些公司会避免使用if-else而采用switch case的方法来解决问题。
在jdk1.6 中:
代码如下 | 复制代码 |
int i= "test".hashcode(); String s = "test"; switch (s.hashcode()) { case i :System.out.println("bad"); }//这种方法是不支持的。编译根本通过不了,因为 i 是一个变量 |
经过网上一翻查找,在jdk1.7中可能会支持这个功能。
但是问题就不能这么简单的解决,因为现在很多企业都没有在使用1.7的版本。
没事在电脑面前想出来一个办法,应该可以行得通在jdk1.6中解决 case不能使用变量的方法
上代码
代码如下 | 复制代码 |
public class TestHash { /** String s = "test";
int i= "test".hashCode();
switch ( ("test1".hashCode()== i ? 1:1) *("test2".hashCode() == i ? 2:1) *(s.hashCode() == i ? 3 :1) ){ case 1 :System.out.println("not good");break; case 2 : System.out.println("not good"); break; case 3 : System.out.println("good"); break;
default : System.out.print(4); break; }//switch }// main
}//class
|
ok,我运行了下,运行结果是打印 good