千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 你了解Java中的switch条件语句吗?

你了解Java中的switch条件语句吗?

来源:千锋教育
发布人:qyf
时间: 2023-03-21 17:17:00 1679390220

你了解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语句。

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT