switch表达式的返回值
必须是下述几种类型之一:int, byte, char, short, String;
错误代码:
long a = 123L;
switch (a) {
case 1:
case n:
...
}
提示错误:
Error:(12, 16) java: 不兼容的类型: 从long转换到int可能会有损失
我们看一下char类型
public class Demo1 {
public static void main(String[] args) {
char c = 'A';
switch (c) {
case 'a':
System.out.println("a");
break;
case 'A':
System.out.println("A");
break;
}
}
}
class文件
public class Demo1 {
public Demo1() {
}
public static void main(String[] args) {
char c = 65;
switch(c) {
case 65:
System.out.println("A");
break;
case 97:
System.out.println("a");
}
}
}
可以看到char类型数据直接转为了int类型
看一下String
public class Demo1 {
public static void main(String[] args) {
String s = "Hello";
switch (s) {
case "Hello":
System.out.println("Hello");
break;
case "World":
System.out.println("World");
break;
}
}
}
class文件
public class Demo1 {
public Demo1() {
}
public static void main(String[] args) {
String s = "Hello";
byte var3 = -1;
switch(s.hashCode()) {
case 69609650:
if (s.equals("Hello")) {
var3 = 0;
}
break;
case 83766130:
if (s.equals("World")) {
var3 = 1;
}
}
switch(var3) {
case 0:
System.out.println("Hello");
break;
case 1:
System.out.println("World");
}
}
}
显然它直接使用了hashCode()方法,返回了哈希码,还是转为int类型
结论
显然switch语句在使用时返回值会转为int类型, long类型容量大于int,强制转化会缺失精度,那float、double就更不能转int了。
版权声明:本文为yy1127620991原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。