使用String的Java 7 switch语句是否使用equals()方法?

时间:2013-09-05 12:06:08

标签: java string switch-statement equals

Java 7支持使用Strings切换,如下面的代码

switch (month.toLowerCase()) {
case "january":
    monthNumber = 1;
    break;
case "february":
    monthNumber = 2;
    break;
default: 
    monthNumber = 0;
    break;
}

Java是否在每个equals()案例中调用String方法?或者它依赖于==intern()

这仅仅相当于:

String month = month.toLowerCase();
if("january".equals(month)){
monthNumber = 1;
}else if("february".equals(month)){
monthNumber = 1;
}..

更新:

  

将switch表达式中的String与表达式进行比较   与每个案例标签关联,就好像 String.equals方法一样   被使用。

正如文档所指出的那样,行为就像调用equals()一样。

5 个答案:

答案 0 :(得分:27)

docs

The String in the switch expression is compared with the expressions associated
with each case label as if the String.equals method were being used.

因为它说好像我的猜测是不会,但内部实现与.equals()方法相同。

答案 1 :(得分:8)

Java 7 switch语句实际上生成了使用hashCode()equals()方法的字节码。哈希码用于生成更快的切换查找;即为了避免像if-else链一样的等同检查链。

答案 2 :(得分:6)

  

“与String一起使用时的switch语句使用equals()方法   将给定的表达式与case语句中的每个值进行比较   因此区分大小写并抛出NullPointerException   如果表达式为空。“

http://java.dzone.com/articles/new-java-7-feature-string

答案 3 :(得分:4)

switch一起使用时,String语句使用equals()方法将给定表达式与case语句中的每个值进行比较,因此区分大小写,如果表达式为NullPointerException,则会抛出null

答案 4 :(得分:1)

我找到了一篇解释how switch over string is implemented in Java 7

的有用文章