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

Java 中 switch-case 语句的执行逻辑与避坑指南

       在 Java 编程的世界里,switch-case语句是一种常用的条件判断结构,它能根据不同的条件值执行相应的代码块,简洁明了。然而,switch-case语句中存在的fall-through(贯穿)特性,却常常让开发者在不经意间掉入逻辑错误的 “陷阱”。下面我们通过一段具体的代码,深入剖析这一特性及其带来的影响。

package com.summer;import java.util.Arrays;
import java.util.List;public class SwitchCaseExample {public static void main(String[] args) {List<String> list = Arrays.asList("1");for (int i = 0, len = list.size(); i < len; i++) {String s = list.get(i); // s = "1"switch (s) {case "1": { // 匹配到这里if (s == "2") { // 这个条件不会执行,因为 s 是 "1"break;}// 这里没有 break,所以会继续执行下一个 case}case "2": { // 继续执行到这里System.out.println("2"); // 输出 "2"break;}case "3": {break;}default: {break;}}}}
}

      上述代码中,执行顺序:

  1. s = "1",匹配到 case "1"
  1. 执行 case "1" 中的代码,if 条件不成立
  1. 由于 case "1" 中没有 break,继续执行 case "2"
  1. 执行 case "2" 中的代码,打印 "2"
  1. 遇到 break,退出 switch

要避免这种情况,应该在每个 case 后添加 break:

List<String> list = Arrays.asList("1");
for (int i=0,len= list.size();i<len;i++){String s = list.get(i);switch (s){case "1": {if(s=="2"){break;}break;  // 添加 break}case "2": {System.out.println("2");break;}case "3": {break;}default: {break;}}
}

注意事项:

  1. Java 中的 switch-case 语句会从匹配的 case 开始执行,然后继续执行后面的所有 case,直到遇到 break
  2. 这种特性称为 fall-through(贯穿)
  3. 如果不想要 fall-through 特性,需要在每个 case 后添加 break
  4. 在 Java 12 及以后的版本中,可以使用 switch 表达式来避免这个问题:
// Java 12+
String result = switch (s) {case "1" -> {if (s == "2") {yield "break";}yield "1";}case "2" -> "2";case "3" -> "3";default -> "default";
};
http://www.xdnf.cn/news/13371.html

相关文章:

  • Java判断规则工具类
  • 工作日记总结-transaction is aborted, commands ignored until end of transaction block
  • [软件测试]:什么是自动化测试?selenium+webdriver-manager的安装,实现你的第一个脚本
  • Kotlin基础语法二
  • 大数据学习(136)-数据埋点
  • 玄机 日志分析-Tomcat日志分析 WriteUp
  • G-Star公益行 | 公益组织入门开源技术,六月北京点燃改变的星火
  • 【MySQL数据库】InnoDB存储引擎:事务原理redolog、undolog与版本控制MVCC
  • QuecPython 文件系统操作
  • 多光谱图像技术在苗期作物与杂草识别中的研究进展
  • C语言学习20250610
  • Dynadot邮箱工具指南(六):将域名邮箱添加至网易邮箱大师
  • Leetcode 3576. Transform Array to All Equal Elements
  • 新能源知识库(34)什么是单一制和两部制
  • 【SAP MM SD FICO】销售视图和会计视图
  • C++ 8.1内联函数之宏定义
  • Metasploitable: 1靶场渗透
  • 在postgresql中,group by时取第一个值
  • 网络编程(Modbus进阶)
  • Manus 框架与 COKE 框架解析及完整 Demo
  • Unreal从入门到精通之使用 CheatManager 自定义控制台命令
  • 操作系统的一些名词
  • 期末考试复习总结-第一章《HarmonyOS介绍》
  • ​计算机网络原理超详解说​
  • 2025-03-14-Google检索技巧
  • 华为云Flexus+DeepSeek征文 | 基于ModelArts Studio、DeepSeek大模型和Dify搭建网站智能客服助手
  • 深度学习——简介
  • Ubuntu下挂载NTFS格式磁盘
  • 访问服务器项目,服务器可以ping通,但是端口访问不到
  • C++ mutex 锁的使用