switch case时出现了Constant expression required

阅读数:39 评论数:0

跳转到新版页面

分类

python/Java

正文

switch case支持的类型:byte、short、char、int、枚举类型、java.lang.String中。

一般出现上述问题,多半是因为在switch case语句中使用了基础类型的包装类,例如使用了Integer,而不是int,这时换成基础类型即可以解决问题。

一、switch的用法

1、注意事项

(1)switch括号内的变量应与case后常量类型保持一致,或者是可以自动转换成可以互相比较的类型。

(2)case标签可以是:类型为char、byte、short或int的常量表达式;枚举常量enum;字符串字面量String;多个字符串用逗号分隔。

(3)break和yield语句用来在执行完一个case分支后使程序跳出switch语句,如果没有break或yield,程序会顺序执行到switch结尾,产生直通行为。

(4)不能在一个switch语句中混合使用冒号和箭头。

(5)yield会终止执行。但与break不同的是,yield还会生成一个值,这就是表达式的值。

(6)表达式会生成一个值。

2、表达式,无直通行为

int numLetters
numLetters = switch(seasonName){
	case "Spring" ->{
		System.out.println("spring time");
		yield 6;
		}
	case "Summer","Winter" -> 6;
	case "Fall" -> 4;
	default -> -1;
}

3、语句,无直通行为

switch(seasonName){
	case "Spring" -> {
		System.out.println("spring time");
		numLetters = 6;
		}
	case "Summer","Winter" -> numLetters = 6;
	case "Fall" -> numLetters = 4;
	default -> numLetters = -1;
}

4、表达式,有直通行为(java 14引入)

int numLetters
numLetters = switch(seasonName){
	case "Spring":
		System.out.println("spring time");
	case "Summer","Winter":
		yield 6;
	case "Fall":
		yield 4;
	default:
		yield -1;
}

5、语句,有直通行为

switch(seasonName){
	case "Spring":
		System.out.println("spring time");
	case "Summer","Winter":
		numLetters = 6;
		break;
	case "Fall":
		numLetters = 4;
		break;
	default:
		numLetters = -1;
}



相关推荐

一、概述 enum是一个特殊的Java类,继承自java.lang.Enum,但又是一个不能够被继承的final类。它可以定义在interface或class中,也有构造函数、方法、数据域。 1、枚举