Java基础小知识

1.  switch  语句能否作用在 byte  上,能否作用在 long  上,能否作用在 String上?

在 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 编译器会对它进行特殊处理,默认的向右转换类型,不需要人工转换,因此可以正确编译。

原文地址:https://www.cnblogs.com/elgin-seth/p/5293758.html