switch在Java编译器处理的底层实现是使用 int 型 来进行判断的,即使是枚举、String类型,最终也是转变成 int 型。由于 long 型表示范围大于 int 型,因此不支持 long 类型。

例如:

public static int stringSwitch(String ss) {
    switch (ss) {
        case "ABCDEa123abc":
            return 1;
        case "ABCDFB123abc":
            return 2;
        case "helloWorld":
            return 3;
        default:
            return Integer.MAX_VALUE;
    }
}

反编译的结果:

public static int stringSwitch(String ss) {
    byte var2 = -1;
    switch(ss.hashCode()) {
    case -1554135584:
        if (ss.equals("helloWorld")) {
            var2 = 2;
        }
        break;
    case 165374702:
        if (ss.equals("ABCDFB123abc")) {
            var2 = 1;
        } else if (ss.equals("ABCDEa123abc")) {
            var2 = 0;
        }
    }

    switch(var2) {
    case 0:
        return 1;
    case 1:
        return 2;
    case 2:
        return 3;
    default:
        return 2147483647;
    }
}

参考:https://juejin.cn/post/6936457961459941384