java中string可以作用于switch吗?

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有关系。