我对switch-case声明有疑问。 这是我的代码:
String month = "April";
switch (month.toLowerCase()) {
case "january":
monthNumber = 1;
break;
case "february":
monthNumber = 2;
break;
case "march":
monthNumber = 3;
break;
case "april":
monthNumber = 4;
break;
依旧......
在这方面我有3个问题:
1)将月份与案例值进行比较,即案例“1月”,案例 “二月”..编译器从下面使用的是什么? - month.equals(“case-value”)? - 月==案例价值?
2)并且case-values内部转换为StringBuilder / StringStringBuffer或者只是它们仍然是String对象??
3)我如何才能从字节代码中知道这一点,即是否有任何可用的工具,我可以直接查看编译器生成的代码,以了解内部的行为如何?
答案 0 :(得分:2)
3)我相信JDeveloper具有字节码调试器功能。如果JDeveloper不是和选项,请查看我找到的这些工具:
http://sourceforge.net/projects/jbcd/
http://andrei.gmxhome.de/bytecode/index.html
http://www.drgarbage.com/how-to-debug-bytecode-with-bytecode-visualizer.html
答案 1 :(得分:1)
不确定数字3,但查看字节代码的级别可能太低,无法轻易查看正在使用的方法。
1)使用.equals()比较字符串。
2)字符串保留为String对象
请参阅:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html
答案 2 :(得分:1)
1 - 将switch表达式中的String与每个case标签关联的表达式进行比较,就好像正在使用String.equals方法一样。
2 - Normal switch对象用于此switch case语句
http://blogs.oracle.com/darcy/entry/project_coin_string_switch_anatomy