当初学习java的时候只是大概记得switch可以接受整形,枚举类型和String类型(java7),因为平时用的并不是太多,所以没有进行过深入的研究。 今天就遇到了一个这方面的问题,所以有必要把switch可以接受的参数总结一下。 首先由byte登场,
public class Test{ public static void main(String[] args) { byte x = 2; switch(x){ case 1 : System.out.PRintln("case1"); break; case 2 : System.out.println("case2"); break; case 3 : System.out.println("case3"); break; case 4 : System.out.println("case4"); break; }然后是short类型
short x = 2; switch(x){ case 1 : System.out.println("case1"); break; case 2 : System.out.println("case2"); break; case 3 : System.out.println("case3"); break; case 4 : System.out.println("case4"); break;还有int类型
int x = 2; switch(x){ case 1 : System.out.println("case1"); break; case 2 : System.out.println("case2"); break; case 3 : System.out.println("case3"); break; case 4 : System.out.println("case4"); break;再来试试char类型
char x = 1; switch(x){ case 1 : System.out.println("case1"); break; case 2 : System.out.println("case2"); break; case 3 : System.out.println("case3"); break; case 4 : System.out.println("case4"); break;他们的执行结果都是符合预期的,会进入case2. 然而问题出现在了long类型上,
long x = 2; switch(x){ case 1L : System.out.println("case1"); break; case 2L : System.out.println("case2"); break; case 3L : System.out.println("case3"); break; case 4L : System.out.println("case4"); break; Test.java:6: 错误: 不兼容的类型: 从long转换到int可能会有损失 switch(x){这说明switch()只可以接受int或者能够自动提升为int类型的类型,对于大于int类型的long自然就是拒绝的了。
还有boolean类型,我也做了一下实验
boolean x = false; switch(x){ case true : System.out.println("case1"); break; case false : System.out.println("case2"); break;Test.java:6: 错误: 不兼容的类型: boolean无法转换为int结果也是不可以的同样的对于浮点型也会出现类似的错误
不兼容的类型: 从float转换到int可能会有损失 不兼容的类型: 从double转换到int可能会有损失所以说switch能够接受的参数只有byte、char、short、int、枚举、String(java7)这几种。
新闻热点
疑难解答