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()
一样。
答案 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 如果表达式为空。“
答案 3 :(得分:4)
与switch
一起使用时,String
语句使用equals()
方法将给定表达式与case
语句中的每个值进行比较,因此区分大小写,如果表达式为NullPointerException
,则会抛出null
。
答案 4 :(得分:1)