持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天,点击查看活动详情
正文
Java 中 switch case 语句用来判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
语法格式如下:
switch(type){
case value :
//语句
break; //可选
case value :
//语句
break; //可选
//你可以有任意数量的case语句
default : //可选
//语句
}
这里的 type 都支持哪些类型呢?
-
基本数据类型:byte, short, char, int
-
包装数据类型:Byte, Short, Character, Integer
-
枚举类型:Enum
-
字符串类型:String(Jdk 7+ 开始支持)
基本数据类型和字符串很简单不用说,下面举一个使用包装类型和枚举的,其实也不难,注意只能用在 switch 块里面。
使用包装类型
Integer value = 2;
switch (value) {
case 1:
System.out.println("第一名");
break;
case 2:
System.out.println("第二名");
break;
default:
System.out.println("default");
}
使用枚举类型
我们经常在编码存在不同判断的情况 switch 也经常和一些基础类型和包装类型一起去使用 但是为了方便管理我们也可以使用枚举
枚举类
public enum UserSearchTypeEnums {
PLATE_USER("30", "代理商"),
NOT_IN_DATA("31", "非存在用户"),;
UserSearchTypeEnums(String code, String value){
this.code = code;
this.value = value;
}
private String code;
private String value;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public static UserSearchTypeEnums getByCode(String code){
for(UserSearchTypeEnums enumObject: UserSearchTypeEnums.values()){
if(code.equals(enumObject.getCode())){
return enumObject;
}
}
return null;
}
public static UserSearchTypeEnums getByValue(String value){
for(UserSearchTypeEnums enumObject: UserSearchTypeEnums.values()){
if(value.equals(enumObject.getValue())){
return enumObject;
}
}
return null;
}
}
结合枚举使用案例
UserSearchTypeEnums blaDataRulesEnums = UserSearchTypeEnums.getByCode(brand.getFromType());
if (blaDataRulesEnums != null) {
switch (blaDataRulesEnums) {
case PLATE_USER:
this.filterFromType(queryWrapper, brand);
break;
case NOT_IN_DATA:
this.filterNoIn(queryWrapper, brand);
break;
}
}
使用 switch case 语句也有以下几点需要注意。
1、 case 里面必须跟 break,不然程序会一个个 case 执行下去,直到最后一个 break 的 case 或者 default 出现。
1.1、例如: Switch的穿透
int state =2;
switch (state) {
case 1:
System.out.println("1");
case 2:
System.out.println("2");
case 3:
System.out.println("3");
default:
System.out.println("4");
break;
}
如上代码,输出结果为:2,3,4;即使state不为3和4,因为2中匹配后没有break,则后续代码则不会进行case判断,直到遇到break为止。
2、case 条件里面只能是常量或者字面常量。
3、default 语句可有可无,最多只能有一个。