如何为字符串执行switch case?

时间:2012-02-03 06:36:46

标签: java compiler-construction switch-statement bytecode

我对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)我如何才能从字节代码中知道这一点,即是否有任何可用的工具,我可以直接查看编译器生成的代码,以了解内部的行为如何?

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