你了解Java中的switch条件语句吗?
是的,我了解Java中的switch条件语句。switch语句是一种条件语句,可以让程序在不同的情况下执行不同的代码块。
1.代码案例展示
下面是一个使用switch语句的示例:
int dayOfWeek = 3;
switch (dayOfWeek) {
case 1:
System.out.println("Today is Monday");
break;
case 2:
System.out.println("Today is Tuesday");
break;
case 3:
System.out.println("Today is Wednesday");
break;
case 4:
System.out.println("Today is Thursday");
break;
case 5:
System.out.println("Today is Friday");
break;
case 6:
System.out.println("Today is Saturday");
break;
case 7:
System.out.println("Today is Sunday");
break;
default:
System.out.println("Invalid day of week");
break;
}
在这个例子中,switch语句根据dayOfWeek的值执行不同的代码块。如果dayOfWeek等于1,那么执行第一个case语句块;如果等于2,执行第二个case语句块,以此类推。如果dayOfWeek的值不在1到7之间,那么执行default语句块。
在每个case语句块的结尾处,都有一个break语句,用于结束switch语句的执行。如果没有break语句,那么会继续执行下一个case语句块,直到遇到break语句为止。
这个时候有朋友问了:Java中的switch这个关键字现在是不是很少有人用了?
这个也不一定啦,因为Java中,switch语句仍然是一种有效的控制流结构,但它的使用可能比其他控制流结构(如if语句和循环结构)更少。
在某些情况下,switch语句可以比if语句更加简洁和可读,特别是当你需要在多个条件中选择一个时。然而,在其他情况下,if语句可能更加灵活,例如当你需要比较一个范围而不是一个具体的值时。
此外,对于某些开发者而言,switch语句的限制也可能是它不太受欢迎的原因之一。例如,switch语句中的每个case标签必须是一个常量表达式,这意味着你无法在运行时动态计算case标签。
总之,虽然在某些情况下switch语句可能是一种更好的选择,但在其他情况下,if语句可能更加适合。因此,是否使用switch语句取决于具体的情况和开发者的偏好。
而我目前switch还出来新特性:
2.switch新特性
2.1概述
我们知道,在使用switch时有可能会出现”case穿透“现象。如果你遗漏了break语句,有可能会造成严重的逻辑错误,而且这种错误还不太容易在源码中发现。所以为了防止意外出现”case穿透“,从JDK 12开始,switch语句升级成了更简单的表达式语法,使用了一种类似于模式匹配(Pattern Matching)的方式,确保只有一个路径会被执行,而且不再需要我们手动添加break语句。
这一新特性,可以说简化了不少无效代码,还规避了一定的风险,简直不要太赞哦。接下来壹哥就给大家设计几个案例,说说JDK 12中switch的使用。因为壹哥当前的JDK版本是JDK 17,可以向下兼容JDK 12,所以我们不用单独安装JDK 12哦。
2.2代码案例
2.2.1->符号
在JDK 12的switch语句中,支持使用->符号,当然也可以不使用->符号,继续采用以前的写法也没问题。如果case后面只有一条语句,可以直接在->后面编写该语句;如果有多条语句,需要用{}括起来。另外在JDK 12的switch语句中,不用再写break语句,新的语法只会执行匹配的语句,不会出现”穿透效应“。
public class Demo01 {
public static void main(String[] args) {
// switch结构-case穿透
System.out.println("请选择你的国家");
Scanner sc = new Scanner(System.in);
String country = sc.next();
switch (country) {
case "中国" -> System.out.println("我是中国人,我自豪!");
case "日本" -> System.out.println("鬼子脚盆鸡");
case "美国" -> {
System.out.println("暂时还是老大");
System.out.println("喜欢欺负人");
}
default -> System.out.println("未知国籍,黑户");
}
}
}
2.2.2switch中返回结果
在JDK 12中,我们可以把在switch语句中把产生的结果直接返回,不必再使用break语句进行结束。一般情况下,我们在switch表达式内部只会返回简单的值。但如果你想要处理多个复杂的语句,其实也可以写很多语句,这些代码都要放到放到{...}里面,然后使用yield关键字(以后细讲)进行返回。配套案例如下:
public class Demo01 {
public static void main(String[] args) {
// switch结构-case穿透
System.out.println("请选择你的国家");
Scanner sc = new Scanner(System.in);
String country = sc.next();
// 注意:这里的返回值类型,可以是任意类型。我们后面在学习方法时再细说返回值的问题
String result = switch (country) {
case "中国" -> "我是中国人,我自豪!";
case "日本" -> "鬼子脚盆鸡";// 返回值只能有一个
case "美国" -> {
String str = "我们就喜欢以德服人";
// 注意:这里需要返回一个变量!!!
yield str;
}
default -> "未知国籍,黑户";
};// 注意:这里需要有个“;”,表示语句的结束
System.out.println("你的国家情况:" + result);
}
}
现在大家明白了吗,不要根据别人的喜好来判断它是否有用,还是要自己用过之后再去判断,但是刚入门的朋友们还是要好好学习哈!最后赠送大家一道面试题:if和switch的区别?
相同点
●if和switch都是Java里的分支选择语句,它俩都属于条件分支语句;
●很多时候,if和swich可以实现的效果类似。
不同点
●switch结构只能处理等值条件判断的情况,且条件必须是整型、枚举变量或字符型变量;
●多重if选择结构没有switch结构的诸多限制,特别适合某个变量处于某个连续区间时的情况;
●if比switch应用范围更广、更灵活。if可以实现的条件判断,switch不一定能够实现;switch可以实现的条件判断,if肯定可以实现。
●if 在应用中更为常见,但switch的结构更清晰。
●switch使用查找表比对的方式,使得case的条件必须是连续的常量,if语句则没有这些限制。
●一般情况下,switch比if-else效率更高。因为switch内部使用了Binary Tree算法,不管有多少个case,都只计算一次值,直接跳转,不需逐个比较查询,除非是if-else的第一个条件就为true。
●switch的效率其实与分支数无关。只有当分支比较少时,if语句的效率才比switch高,因为switch有跳转表。当分支较多时,推荐使用switch语句。