当前位置: 首页 > news >正文

Switch分支结构的细节

1.是什么

    switch 语句是 Java 中用于实现多分支选择的一种控制流语句。它可以用来替代多个 if-else 语句,使代码更简洁和易读。下面是一些在使用 switch 语句时需要注意的事项和细节:


1. 基本语法

switch 语句的基本语法如下:

switch (expression) {case value1:// Code blockbreak;case value2:// Code blockbreak;default:// Default block
}
  • expression: 一个整数类型的表达式(如 intcharbyteshort)或一个枚举类型。Java 7 及之后的版本支持 String 类型。
  • case value: 每个 case 标签后面跟一个常量值,表示该分支的匹配条件。
  • break: 用于跳出 switch 语句。没有 break 的话,程序会继续执行下一个 case 分支,直到遇到 breakswitch 语句结束。
  • default: 可选,用于处理所有不匹配的情况。如果没有 default 分支,当所有 case 都不匹配时,不会执行任何代码。

细节:

①:表达式数据类型,应和case后的常量类型一致,或者是可以自动转成可以相互比较的类型,比如输入的是字符,而常量是int

以下是一个示例,说明如何使用字符作为switch表达式,并使用int常量作为case标签:

public class SwitchCharToIntExample {public static void main(String[] args) {char ch = 'A'; // 字符Aswitch (ch) {case 65: // 'A'在Unicode表中的整数值是65System.out.println("The character is A");break;case 66: // 'B'在Unicode表中的整数值是66System.out.println("The character is B");break;case 67: // 'C'在Unicode表中的整数值是67System.out.println("The character is C");break;default:System.out.println("The character is not A, B, or C");}}
}

        在这个例子中,switch表达式是一个字符ch。在case标签中,我们使用了整数值,这些整数值对应于字符'A''B''C'Unicode表中的编码。当执行这个程序时,由于ch'A',它对应的Unicode整数值是65,所以会匹配case 65并打印出"The character is A"。

反例:

public class IncompatibleSwitchExample {public static void main(String[] args) {String str = "one"; // 字符串类型// 下面的switch语句会导致编译错误,因为switch表达式是String类型,// 而case标签中的常量是int类型,两者不兼容。switch (str) {case 1: // 错误:不能将String与int比较System.out.println("String is 'one'");break;default:System.out.println("String is not 'one'");}}
}

        在上面的代码中,我们试图将一个String类型的变量str与一个整数值1进行比较。由于String类型不能自动转换为int类型,因此编译器会报错,指出这两种类型不兼容,无法进行比较。


②switch(表达式)中表达式的返回值必须是:(byte,short,int,char,enum[枚
举],String)

        以下是一个反例,其中尝试在switch语句中使用double类型的表达式,这将导致编译错误,因为double不是switch语句支持的类型:

public class InvalidSwitchTypeExample {public static void main(String[] args) {double value = 3.14; // double类型// 下面的switch语句会导致编译错误,因为switch表达式是double类型,// 而Java中的switch语句不支持double类型。switch (value) {case 3.14:System.out.println("Value is 3.14");break;default:System.out.println("Value is not 3.14");}}
}

        在上述代码中,尝试使用double类型的变量value作为switch表达式的值。由于switch语句不支持double类型,编译器会报错,指出switch表达式必须是byteshortintcharenum(枚举)或String类型。


③case子句中的值必须是常量,而不能是变量

反例:

public class SwitchCaseConstantExample {public static void main(String[] args) {int x = 10; // 变量xfinal int y = 20; // 常量y(使用final关键字)// 下面的switch语句是错误的,因为case子句中的值不能是变量switch (x) {case x: // 错误:case子句中的值不能是变量System.out.println("x matches x");break;case y: // 正确:y是常量System.out.println("x matches y");break;default:System.out.println("No match");}}
}

        在上面的代码中,case x: 是错误的,因为x是一个变量,其值在运行时可能会改变,而case子句需要一个固定的常量值。另一方面,case y: 是正确的,因为y被声明为final,这意味着它的值在初始化后不会改变,因此它被视为一个常量。


④ default子句是可选的,当没有匹配的case时,执行default


⑤如果省略了break语句,则程序会继续执行下一个case块中的代码,直到遇到break语句或switch语句的末尾,这被称为"case穿透"或"case fall-through"。

   好啦,今天的干货就到这啦~    有什么疑问的小伙伴欢迎到评论区留言!


猜你感兴趣的方面:

#面向对象和面向过程有什么区别
#彻底区分:基本数据类型、引用数据类型和包装类型
#成员变量、局部变量和静态变量的区别
#彻底弄清:原码、反码、补码
#值传递和引用传递的区别
#按位与(&)、按位或(|)、按位异或(^)、按位取反(~)
#面向对象的三大特征
#说一说你对多态的理解


http://www.mrgr.cn/news/23928.html

相关文章:

  • Python3中函数的用法
  • man命令学习记录
  • 大屏可视化:完美自适应的解决方案
  • 实战案例(2)防火墙+二交换机VLAN组网
  • 计算机毕业设计 家校互联管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试
  • strncpy陷阱
  • 后端开发面经系列--百度内容生态C++一面
  • 操作系统 --- 线程(Threads)概念 多线程模型 线程控制与组织
  • (Java企业 / 公司项目)点赞业务系统设计与完成
  • HAProxy--高性能反向代理
  • Windows远程桌面授权远程代码执行漏洞CVE-2024-38077(POC、EXP)
  • 6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)
  • GitLab CI Runner安装
  • HTML/CSS/JS学习笔记 Day4(HTML--C3 表格)
  • 交换技术是一种在计算机网络和通信系统中广泛应用的关键技术,它主要通过交换设备(如交换机、路由器等)实现数据的转发和传输
  • 面试题—Java基础
  • 具有RC反馈电路的正弦波振荡器(文氏桥振荡器+相移振荡器+双T振荡器)
  • Linux学习-ELK(一)
  • MybatisPlus的学习
  • LLM大模型学习:AI大模型原理、应用与未来趋势!