我用Java编写了以下代码,运行良好:
public class test {
public static void main(String[] args) {
final String s1 = "s1" ;
final String s2 = "s2" ;
String s = "s1" ;
switch(s) {
case s1 : System.out.println("s1") ;
break ;
case s2 : System.out.println("s2") ;
break ;
}
}
}
但是当我写下面的代码时:
public class test {
public static void main(String[] args) {
final String s1 = "s1".toString() ;
final String s2 = "s2".toString() ;
String s = "s1" ;
switch(s) {
case s1 : System.out.println("s1") ;
break ;
case s2 : System.out.println("s2") ;
break ;
}
}
}
我收到以下错误:
test.java:8: error: constant string expression required
case s1 : System.out.println("s1") ;
^
test.java:10: error: constant string expression required
case s2 : System.out.println("s2") ;
我正在寻找解释,因为我无法理解为什么第二个代码会给我这个错误。
答案 0 :(得分:10)
因为"s1".toString()
不是编译时常量表达式。只有编译时常量(或enum
常量名称)才能用作switch
语句中的标签。有关构成常量表达式的规则,请参阅Java Language Specification, Section 15.28。 (有关switch
语句的规则,请参阅JLS §14.11。)