在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以.显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中
java中类型转化问题(低精度向高精度转换)即 byte、short、char----->int
eg.
byte b=2,e=3;
byte f= b+e;
以上代码不能通过编译,应改为:
byte b=2,e=3;
byte f=(byte) (b+e);//因为byte,char,short会自动转为int,这里必须强制转换为byte
对于short s1 = 1; s1 = s1+ 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误
对于short s1 = 1; s1 +=1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。
但+=运算符不会产生类型转换,如:
short s=1;s=s+1;编译错误
short s=1;s+=1;正确