switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
很多回答都是不能,但是关于string的问题,为什么可以呢?
String s="1";
switch(s){
case "1":
}
这要是没问题的呢?为什么呢
这是编译器规定的。因为switch的判断的代码是编译器硬编码实现的,因此编译器对于内置类型,理论上想实现,都可以实现。
switch后跟String类型在jdk1.6之前是不可以的,但是jdk1.7或者jdk1.8这两个版本中有一版开始支持了,具体哪个版本忘记了。
看你的jdk。你学习的时候,书上都写的有吧!仔细看看书。与jdk有关系。
为什么非要用string呢,char和int不够用吗
String s="1";取得还是char值,还没超出范围,你String s = “你好”;试一下?但这样试又有什么意义呢,switch语法的作用又是什么呢?
jdk1.7中switch语句可以支持String。但不建议用String,效率不高,编译中最终会转换成hashcode,实质上还是编译成了整型,case分支内又做了字符串比较。
public class Test {
public void caseAnimal(String animal){
UnerLine temp = UnerLine.GetsUnerLine(animal);
switch(temp){
case 没有下划线:
System.out.println("没有下划线");
break;
case 单线:
System.out.println("单线");
break;
case 双线:
System.out.println("双线");
break;
}
}
public enum UnerLine {
没有下划线,单线,双线,点线,划线,长划线,点划线,双点划线,短波浪线,波浪线,双波浪线,粗体,点线粗体,划线粗体,长划线粗体,点划线粗体,双点划线粗体,波浪线粗体;
public static UnerLine GetsUnerLine(String UnerLine){
return valueOf(UnerLine.toLowerCase());
}
}
/**
* @param args
*/
public static void main(String[] args) {
Test client = new Test();
client.caseAnimal("单线");
}
}
事实上这只是个代码片段,其实在UI中,有这么一个combox,里面有 没有下划线,单线,双线,点线,划线,长划线,点划线,双点划线,短波浪线,波浪线,双波浪线,粗体,点线粗体,划线粗体,长划线粗体,点划线粗体,双点划线粗体,波浪线粗体; 这些选项,对应不同的选项需要去作为一个接口的参数,这个时候枚举就可以完成这样的事情,大家自己灵活使用即可
可以的,但只能用常量,不能用变量
书上都写的有吧!仔细看看书。与jdk有关系。