如何使用类级变量使用switch case语句。
@Value("${user.name}")
private static final String userName = "xyz";
public static void main(String[] args) {
String nn = "xyz";
switch (nn) {
case userName:
System.out.println("It Works!!");
}
}
在上面的示例中,我有一个名为“ userName”的类级别变量,该变量正在从属性文件中检索值。要在switch case语句中使用此字段,我必须使其为final并分配一个值,但它不执行case语句。如何在switch case语句中使用类级别变量?
它不会执行您的case语句,因为切换变量nn的值为“ abcd”,而在case变量userName内则为“ xyz”,它正在寻找“ abcd”大小写。
在case userName:
中,表达式(userName
)必须是(编译时)常量表达式。
如果这样声明userName
:
private static final String userName = "xyz";
这是一个编译时表达式。
但是,如果String
变量不是final
,或者它具有空白的初始化程序,或者如果它被初始化为方法调用的结果...或其他一些事情,那么它就不是一个常量表达式。
阅读JLS 15.28以获取有关常量表达式的完整标准。
尚不清楚您的示例出现了什么问题,但是我希望它不会打印任何内容。 "abcd".equals("xyz")
是false
。
以非专业人士的名义
int i = 1 ;
switch(i)
case i: // did you ever do that, it means execute case i when i is equal to i , i
//is always equal to i , so it does not make sense, which case you're
//talking about because i is not fix, you can say when i is 1 or 2 etc so you need to make it final to make it a constant
// you're doing same thing with string