赞
踩
Java中switch-case语句主要用来做条件分支的判断,判断一个变量与一系列的值做相等匹配,每个值都属于一个分支.
语法
switch(expression){
case value :
//语句
break; //可选
case value :
//语句
break; //可选
//...
default : //可选
//语句
}
说明:
num>0
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'); }
1 关于效率.当分支条件多时,switch-case效率较高. 因为在编译时switch-case会生成一个跳转表,来指向实际的case分支地址,跳转表的索引号和switch变量相等的,所以switch-case只需要通过访问对应索引号的项从而达到定位分支. 而if-else结构需要遍历所有的条件分支,直到找到符合条件的.(switch-case像用空间换时间的算法)
2 关于适用范围.switch-case仅在常量选择分支时使用,对于变量表达式,如(num>10 || num<5)等等,不能实现功能,所以相比来说,if-else的使用范围更广,适用的场景更多.
参考资料:
https://www.runoob.com/java/java-switch-case.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。