从Java 7 开始,我们可以在 switch case 中使用字符串,但这仅仅是一个语法糖。内部实现在 switch 中使用字符串的 hash code。 从Java 7 开始,Java 语言支持在switch语句中直接使用String类型的变量。之前的版本只允许在switch语句中使用整型、枚举和一些特定的类(比如Character、Byte、Short和Integer)。 使用字符串作...
答案是:可以(JDK 1.7 及之后版本)!在 JDK 1.7 中,switch 增加了对 String 类型的支持。这是通过将 String 的值转化为其对应的 hashCode 来实现的,但在底层会有额外的字符串比较以确保精确匹配。来看一个例子:运行结果:这是 hello 注意事项:case 中的字符串是区分大小写的,"hello" 和 "Hello" 是...
如果只是浅尝辄止,知道 Java String 类型的 switch 用的 hashCode 就行了。String 的 hashCode() 方法...
下面是一段很简单的Java代码,定义一个int型变量a,然后使用switch语句进行判断。执行这段代码输出内容为5,那么我们将下面这段代码反编译,看看他到底是怎么实现的。 publicclassswitchDemoInt {publicstaticvoidmain(String[] args) {inta = 5;switch(a) {case1: System.out.println(1);break;case5: System.out....
可以发现:进行switch的实际是hash值,然后用equals进行安全检查(因为hash值可能会发生碰撞),所以性能不如枚举。switch支持String其实是一个语法糖,在编译后的字节码文件中都会被还原成原生类型,并在相应位置插入了强制转换代码,底层的JVM在switch上并没有修改。
那么对于 String 来说,利用的就是 hashCode() 函数了,但是 两个不同的字符串 hashCode() 是有可能相等的,这时候就得靠 equals() 函数了,例如存在 switch 语句: publicintstringSwitch(String ss){switch(ss){case"ABCDEa123abc":return1;case"ABCDFB123abc":return2;case"helloWorld":return3;default:returnIn...
2. switch语句能否作用在byte上,能否作用在long类型上,能否作用域String上? switch(e),其中e必须是int型或 enum型,由于short、char或者byte会自动转为int的,所以,这些类型以及这些类型的包装类型也是可以的。显然,long类型是不可以的,String在jdk1.7之前不支持,在此之后是支持的。
不过,好消息是在Java 7之后,这个限制被放宽了!Java 7引入了对String类型的Switch支持,让我们可以更...