当初学习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)这几种。