Java 如何为字符串执行开关情况?

Java 如何为字符串执行开关情况?,java,compiler-construction,switch-statement,bytecode,Java,Compiler Construction,Switch Statement,Bytecode,我对案件陈述有疑问。 这是我的密码: String month = "April"; switch (month.toLowerCase()) { case "january": monthNumber = 1; break; case "february": monthNumber = 2; break;

我对案件陈述有疑问。 这是我的密码:

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/StringBuffer,或者只是保留字符串对象


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

不确定第3点,但查看字节码的级别可能太低,无法轻松查看正在使用的方法

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

2) 字符串保留为字符串对象


请参阅:

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

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

2) 字符串保留为字符串对象


请参阅:

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

2-此switch case语句使用普通字符串对象


1-将开关表达式中的字符串与与每个大小写标签关联的表达式进行比较,就好像使用了String.equals方法一样

2-此switch case语句使用普通字符串对象

3)我相信JDeveloper具有字节码调试器功能。如果JDeveloper不是和选项,请查看我找到的以下工具:

3)我相信JDeveloper具有字节码调试器功能。如果JDeveloper不是和选项,请查看我找到的以下工具:


您能回答第三个问题吗?因为它似乎更难找到。。!你能回答第三个问题吗?因为这似乎更难找到。。!JBCD与我需要的东西类似。谢谢JBCD与我需要的东西类似。谢谢请注意,以不区分大小写的方式比较字符串的最快方法是使用equalsIgnoreCase(),它不会创建新的字符串对象。“打开字符串”始终使用equals(),但可以进行较少的比较,因为它首先比较哈希代码。请注意,以不区分大小写的方式比较字符串的最快方法是使用equalsIgnoreCase(),它不会创建新的字符串对象。Switch-on String始终使用equals(),但可以进行较少的比较,因为它首先比较哈希代码。