用字符串切换语句

Rak*_* KR 4 java switch-statement java-7

我尝试了以下代码:

String str = "Str1";

switch(str) {
    case Constants.First_String  : System.out.println("First String");
                                   break;
    case Constants.Second_String : System.out.println("Second String");
                                   break;
    default : System.out.println("Default String");
}
Run Code Online (Sandbox Code Playgroud)

我的Constants班级是,

public class Constants {
    public static String First_String  = "Str1";
    public static String Second_String = "Str2";
    public static String Third_String  = "Str3";
}
Run Code Online (Sandbox Code Playgroud)

我收到了编译错误,

线程"main"中的异常java.lang.Error:未解决的编译问题:case表达式必须是常量表达式

但是当我尝试使用以下代码时,

switch(str){
    case "Str1" : System.out.println("First String");
                  break;
    case "Str2" : System.out.println("Second String");
                  break;
    default : System.out.println("Default String");
}
Run Code Online (Sandbox Code Playgroud)

没有编译错误,并将输出打印为,

First String
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么在第一种情况下会出现补偿错误.我该如何解决呢.

Kon*_*kov 6

"Str1"是一个编译时常量,这就是为什么case "Str"很好.

但是,从定义中First_String我们可以看出它不是常数,因为它可以随时改变它的值.

您可以尝试将其设置为final:

public static final String First_String  = "Str1";
Run Code Online (Sandbox Code Playgroud)