前言
Java中switch语句作用在long类型上会报错Error
(java: 不兼容的类型)
(constant label of type long is not compatible with switch)
switch case语句分析
switch (变量){
case:变量1 java语句;break;
case:变量2 java语句;break;
case:变量3 java语句;break;
……
default:java语句;
}
Jdk对于变量i ii 的限定为:可以表示int类型的或者String类型的字面值或变量
byte、short、char具有特权,就是如果赋值给他们的整形字面值在取值范围之内,是可以直接赋值的,所以这就意味着,参数可以是byte,short,char类型的变量
switch(变量)其中表达式的值必须是以下几种类型之一:int,byte,char,short,String。
这也就意味着,如果参数传入一个更大的参数类型或者不兼容的参数类型,有可能会报错且损失精度,但是如果符合您的需求,可以通过强制类型转换符”( )”来进行类型的转换,可以解决编译时的报错问题。
Scanner in=new Scanner(System.in);
long data=in.nextInt();
switch (data) {
case 0:
case 1:
case 2:System.out.println(data);
case 3:
case 4:
case 5:System.out.print(data+1);
}
/*
xxx.java:418:16
java: 不兼容的类型: 从long转换到int可能会有损失
*/
下面是经过强制类型转换,注意是在switch后面转,而不是在case后面。
Scanner in=new Scanner(System.in);
long data=in.nextInt();
switch ((int)data) {
case 0:
case 1:
case 2:System.out.println(data);
case 3:
case 4:
case 5:System.out.print(data+1);
}
switch case深入浅出
对于不同的类型,Jvm虚拟机在执行的时候到底是如何比较的,我们可以将.java源文件编译成的.class文件进行查看。
可以发现char类型的变量在比较的时候是直接转化为相应的ASCII码值,而String类型的变量是调用了其内部的hashCode()方法,转化为了hash码。
版权声明:本文为cillian_bao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。