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)
我的问题是,为什么在第一种情况下会出现补偿错误.我该如何解决呢.
"Str1"
是一个编译时常量,这就是为什么case "Str"
很好.
但是,从定义中First_String
我们可以看出它不是常数,因为它可以随时改变它的值.
您可以尝试将其设置为final
:
public static final String First_String = "Str1";
Run Code Online (Sandbox Code Playgroud)