这是我参与11月更文挑战的第3天,活动详情查看:11月更文挑战
Java中switch-case语句主要用来做条件分支的判断,判断一个变量与一系列的值做相等匹配,每个值都属于一个分支.
1 switch-case简介
语法
switch(expression){
case value :
//语句
break; //可选
case value :
//语句
break; //可选
//...
default : //可选
//语句
}
说明:
- 1 switch语句中expression支持的类型为: byte,short,int,char,String,枚举, 但是不支持表达式 如
num>0
- 2 switch语句可以有多个case语句, 但是每个case后面要有一个比较值和冒号
- 3 switch语句遇到break会终止语句. 每个case的语句后break为可选, 如果没有break,会造成穿透效果,即执行后续所有的case语句,直到遇到break语句.
- 4 switch语句中可以添加一个默认分支default. 放置位置没有规定,一般放在最后.当所有分支条件都不满足时,才会走到默认分支,且此分支不需要break语句.
2 switch-case案列
public class switchDemo {
public static void main(String[] args) {
/** * 运行结果: * 优+ * 你的等级是 A */
intTest('A');
/** * 运行结果: * 优 * 良 * 你的等级是 B */
intTest('B');
}
public static void intTest(char grade) {
switch (grade) {
case 'A':
System.out.println("优+");
break;
case 'B':
System.out.println("优");
case 'C':
System.out.println("良");
break;
case 'D':
System.out.println("及格");
break;
case 'F':
System.out.println("不及格");
break;
default:
System.out.println("未知等级");
}
System.out.println("你的等级是 " + grade);
}
}
从控制台输出的结果可以得知, A等级表示优+. B等级为优, 因为没有break语句,造成穿透,把等级为C的语句也执行了.
使用枚举类作为条件
在使用switch中,通常建议使用枚举来替代字符串等变量的比较, 主要是方便后期维护和新增,使得代码规范性更好.
下列使用枚举方案来替代:
1 新建一个枚举类
public enum ScoreEnum {
EXCELLENTPLUS('A', "优+"),
EXCELLENT('B', "优"),
GOOD('C', "良"),
PASS('D', "及格"),
FAIL('E', "不及格"),
UNKNOWN('N', "未知等级");
private Character rank;
private String message;
public static ScoreEnum getByRank(Character rank) {
for (ScoreEnum scoreEnum : ScoreEnum.values()) {
if (scoreEnum.rank.equals(rank)) {
return scoreEnum;
}
}
return UNKNOWN;
}
ScoreEnum(Character rank, String message) {
this.rank = rank;
this.message = message;
}
public Character getRank() {
return rank;
}
public void setRank(Character rank) {
this.rank = rank;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
2 替换switch比较条件
public static void intEnumTest(char grade) {
ScoreEnum scoreEnum = ScoreEnum.getByRank(grade);
switch (scoreEnum) {
case EXCELLENTPLUS:
System.out.println("优+");
System.out.println(scoreEnum.getMessage());
break;
case EXCELLENT:
System.out.println("优");
System.out.println(scoreEnum.getMessage());
case GOOD:
System.out.println("良");
System.out.println(scoreEnum.getMessage());
break;
case PASS:
System.out.println("及格");
System.out.println(scoreEnum.getMessage());
break;
case FAIL:
System.out.println("不及格");
System.out.println(scoreEnum.getMessage());
break;
default:
System.out.println("未知等级");
System.out.println(scoreEnum.getMessage());
}
System.out.println("你的等级是 " + grade);
}
3 比较同样的结果
public static void main(String[] args) {
/** * 运行结果: * 优+ * 优+ * 你的等级是 A * */
intEnumTest('A');
/** * 运行结果: * 优 * 优 * 良 * 优 * 你的等级是 B */
intEnumTest('B');
}
3 关于switch-case和if-else的比较
1 关于效率.当分支条件多时,switch-case效率较高. 因为在编译时switch-case会生成一个跳转表,来指向实际的case分支地址,跳转表的索引号和switch变量相等的,所以switch-case只需要通过访问对应索引号的项从而达到定位分支. 而if-else结构需要遍历所有的条件分支,直到找到符合条件的.(switch-case像用空间换时间的算法)
2 关于适用范围.switch-case仅在常量选择分支时使用,对于变量表达式,如(num>10 || num<5)等等,不能实现功能,所以相比来说,if-else的使用范围更广,适用的场景更多.
参考资料:
今天的文章推荐switch-case语句使用枚举来判断分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/16574.html