字符串的 switch case 是如何执行的?

问题描述 投票:0回答:3

我对 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)将月份与案例值进行比较,即案例“一月”,案例 “二月”..编译器到底使用了什么? - 月.等于(“案例值”)? - 月份==案例值?

2)大小写值是否在内部转换为 StringBuilder/StringStringBuffer 或者只是保留 String 对象??

3)我如何从字节码中知道这一点,即是否有任何可用的工具可以使用它直接查看编译器生成的代码,以了解其内部行为?

java switch-statement bytecode
3个回答
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
投票

不确定数字 3,但查看字节码可能级别太低,无法轻松看出正在使用哪些方法。

1) 使用 .equals() 比较字符串。

2) 字符串保留为 String 对象

请参阅:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html


1
投票

1 - 将 switch 表达式中的字符串与与每个 case 标签关联的表达式进行比较,就像使用 String.equals 方法一样。

2 - 普通 String 对象用于此 switch case 语句

http://blogs.oracle.com/darcy/entry/project_coin_string_switch_anatomy

© www.soinside.com 2019 - 2024. All rights reserved.