在 switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体) ,整数表达式可以是 int 基本类型或 Integer 包装类型,由于,byte,short,char 都可以隐含转换为 int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long 和 String 类型都不符合switch 的语法规定, 并且不能被隐式转换成 int 类型, 所以, 它们不能作用于 swtich 语句中。
更正 :在JDK7中,支持switch表达式为字符串类型,而不支持long类型。
public class TestSwitch { public static void main(String[] args) { String x="awb"; switch(x){ case "a" : System.out.println("a");break; case "b" : System.out.println("b");break; case "acb": System.out.println(x);break; default : System.out.println("no x match"); } } private void testlong(){ long x=100; switch(x){ //在这里编译错误,错误提示:Cannot switch on a value of type long. Only convertible int values, strings or enum variables are permitted } } }2.short s1 = 1; s1 = s1 + 1; 有什么错? short s1 = 1; s1 += 1; 有什么错?
对于 short s1 = 1; s1 = s1 + 1;由于 s1+1运算时会自动提升表达式的类型,所以结果是 int型,再赋值给 short 类型 s1时,编译器将报告需要强制转换类型的错误,要想等号成立,必须显示将结果强转为short类型再赋值给s1。
对于 short s1 = 1; s1 += 1;由于 +=是 java 语言规定的运算符,java 编译器会对它进行特殊处理,默认的向右转换类型,不需要人工转换,因此可以正确编译。