问题引入
最近在网上找了一些Java面试常见问题。其中有一题是这样描述的:
switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
对于byte答案是肯定可以的
long的话是不可以的,会报如下错误:
Cannot switch on a value of type long. Only convertible int values, strings or enum variables are permitted.
有人可能已经发现了,String类型也是支持的。是的从Jdk1.7开始,switch后面可以使用String类型了。
然后好多资料上对这道题的答案依然是:
long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。
正应了那句老话,“尽信书不如无书”。
实现细节
为了弄明白其实现细节,我特地写了个例子:
public static void main(String[] args) {
String name = "小明";
switch(name) {
case "小明": {
System.out.println("小明你好!");
break;
}
default:{
System.