1. switch 语句能否作用在 byte 上,能否作用在 long 上,能否作用在 String上?
对于 short s1 = 1; s1 = s1 + 1;由于 s1+1运算时会 自动提升表达式的类型,所以结果是 int型,再赋值给 short 类型 s1时,编译器将报告需要强制转换类型的错误,要想等号成立,必须显示将结果强转为short类型再赋值给s1。
对于 short s1 = 1; s1 += 1;由于 +=是 java 语言规定的运算符,java 编译器会对它进行特殊处理 ,默认的向右转换类型,不需要人工转换,因此可以正确编译。
在 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 编译器会对它进行特殊处理 ,默认的向右转换类型,不需要人工转换,因此可以正确编译。