Switch case不再仅限int类型
switch语句的case表达式并不仅限于int类型。其支持的数据类型取决于具体的编程语言版本。在早期版本如 Java 7 之前或某些严格模式下限制确实较多但现代编程语言尤其是 Java 7 及以后版本已经极大地扩展了支持范围。为了清晰展示不同语言和版本下switch语句支持的数据类型下表进行了详细对比编程语言 / 版本支持的case表达式类型关键特性 / 限制说明Java 7char,byte,short,int、 枚举 (enum)、 字符串 (String)1. 支持 4 种整型及其包装类 (如Character,Byte,Short,Integer)以及enum和String。2.不支持long,float,double,boolean及其包装类 。3.String类型从 Java 7 开始支持其匹配是基于String.equals()方法的内容比较 。Java 7 以前char,byte,short,int、 枚举 (enum)1. 主要支持能隐式转换为int的类型 (如char,byte,short) 和enum。2.不支持String类型。C语言整型 (int)、 字符型 (char)1. 严格来说switch表达式必须为整型 (int) 或能隐式转换为整型的类型如char。2.case标签必须是整型常量表达式编译期可确定的常量值。通用原则可转换为整型的类型、枚举、字符串现代语言1.case值的类型必须与switch表达式的类型严格一致或兼容 。2.case值必须是编译期常量不能是变量或运行时计算的表达式 。核心概念与代码示例1. 类型匹配与常量要求switch语句的核心机制是将switch表达式的值与各个case标签的值进行精确匹配。因此case值的类型必须与switch表达式的类型严格一致。更重要的是case标签后的值必须是编译时常量即在代码编译时就能确定其值不能是变量或方法调用的结果。以下 Java 代码示例展示了合法的常量用法和非法的变量用法// 示例 1: 合法的常量用法 int day 3; switch (day) { case 1: // 正确1 是字面量常量 System.out.println(Monday); break; case 2: // 正确2 是字面量常量 System.out.println(Tuesday); break; // ... 其他 case default: System.out.println(Invalid day); } // 示例 2: 非法的变量用法编译错误 int variable 2; switch (day) { case variable: // 错误case 标签不能是变量 System.out.println(Variable case); break; case getDayNumber(): // 错误case 标签不能是方法调用 System.out.println(Method call case); break; }2. 穿透 (fall-through) 与break一个常见的注意事项是case的“穿透”行为。如果在一个case分支的末尾没有写break语句程序会继续执行下一个case分支的代码直到遇到break或switch语句结束。这有时是故意为之以实现某些逻辑但通常被视为容易出错的地方建议每个case都明确使用break终止。// 示例 3: 穿透 (fall-through) 现象 int month 1; switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: System.out.println(This month has 31 days.); break; // 在这里 break避免执行下面的 case case 2: System.out.println(This month has 28 or 29 days.); break; case 4: case 6: case 9: case 11: System.out.println(This month has 30 days.); break; default: System.out.println(Invalid month.); } // 当 month 为 1, 3, 5... 时都会执行打印 31天 的语句。3.default子句default子句是可选的它用于处理所有case都不匹配的情况。良好的编程习惯是总是包含一个default分支即使它只是记录错误或提供一个默认行为这有助于增强代码的健壮性。4. 现代语言的扩展支持以 Java 为例自 Java 7 起switch语句支持了String类型这是一个重要的扩展。其内部实现是通过比较字符串的哈希码 (hashCode()) 并进行最终的equals()比较来确保准确性。// 示例 4: 使用 String 类型的 switch (Java 7) String fruit Apple; switch (fruit) { case Apple: System.out.println(Selected Apple); break; case Banana: System.out.println(Selected Banana); break; case Orange: System.out.println(Selected Orange); break; default: System.out.println(Unknown fruit); }此外枚举 (enum)类型与switch是绝佳搭配能提供类型安全且可读性高的代码。// 示例 5: 使用枚举 (enum) 类型的 switch enum Status { NEW, PROCESSING, COMPLETED, CANCELLED } Status currentStatus Status.PROCESSING; switch (currentStatus) { case NEW: System.out.println(Order is new.); break; case PROCESSING: System.out.println(Order is being processed.); break; case COMPLETED: System.out.println(Order is completed.); break; case CANCELLED: System.out.println(Order is cancelled.); break; // 注意枚举的 switch 通常不需要 default因为所有值都已列出除非枚举可能扩展。 }总结来说switch语句的case表达式类型远不止int。在现代 Java 中它支持包括String和枚举在内的多种类型。其核心规则是类型必须匹配且case值必须是编译时常量。理解这些规则和特性如穿透行为、default的使用对于编写正确、清晰和健壮的分支控制代码至关重要。参考来源switch case 语句switch case 的值分支结构switch-case语句选择结构语法格式switch语句switch支持的10种数据类型和注意事项switch语句

相关新闻

楼盘动画的价值密码:从“看房子”到“体验未来的家”

楼盘动画的价值密码:从“看房子”到“体验未来的家”

在楼盘尚未封顶、园林还是一片工地的阶段,如何让潜在购房者真切感受到“这就是我未来的家”?楼盘动画正是解答这个问题的核心工具。一、楼盘动画是什么:不只是“会动的效果图”楼盘动画,也常被称为楼盘漫游动画或房地产动画&#…

2026/7/1 3:02:06阅读更多 →
2026免费去水印工具哪个好用?电脑手机在线无广告无付费工具推荐

2026免费去水印工具哪个好用?电脑手机在线无广告无付费工具推荐

日常刷短视频、保存优质图片素材时,水印往往会影响观感和使用效果,很多个人用户都在寻找免费好用去水印工具,既不想下载臃肿的付费软件,也不愿碰到弹窗广告、次数限制、强制登录的套路。2026年市面上的去水印工具品类繁杂&#xf…

2026/7/1 3:02:06阅读更多 →
别再把 Codex 当 ChatGPT 用

别再把 Codex 当 ChatGPT 用

🔥 个人主页: 杨利杰YJlio ❄️ 个人专栏: 《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》 《WINDOWS教程》 《Windows PowerShell 实战》 《IOS插件分析测试》 《超简单:用Python让Excel飞起来》…

2026/7/1 3:02:06阅读更多 →
别再手动算排名了!用Matlab实现TOPSIS评价模型,5分钟搞定水质评估案例

别再手动算排名了!用Matlab实现TOPSIS评价模型,5分钟搞定水质评估案例

别再手动算排名了!用Matlab实现TOPSIS评价模型,5分钟搞定水质评估案例水质评估是环境监测中的常见需求,但面对pH值、溶解氧、氨氮含量等多项指标时,如何科学量化不同采样点的综合水质水平?传统方法往往依赖专家经验或简…

2026/7/1 5:17:22阅读更多 →
爬虫开发实战:识别与规避反爬蜜罐(Web陷阱)的技术指南

爬虫开发实战:识别与规避反爬蜜罐(Web陷阱)的技术指南

1. 项目概述:当爬虫遇上“甜蜜的陷阱”做爬虫开发的朋友,估计没少和“反爬虫”斗智斗勇。从简单的User-Agent校验、IP频率限制,到复杂的验证码、动态加密参数,这些明面上的对抗大家已经习以为常。但今天要聊的,是一种更…

2026/7/1 5:17:22阅读更多 →
西安军工科研院所首选:满足信创要求的国产数字孪生仿真引擎有哪些?

西安军工科研院所首选:满足信创要求的国产数字孪生仿真引擎有哪些?

一、 西安军工产业的“信创”与“数字孪生”双重挑战西安,作为我国重要的国防科技工业基地,聚集了大量的军工科研院所和装备制造企业。这些单位在进行数字化转型,尤其是构建数字孪生系统时,面临着两个极为特殊且必须解决的核心矛盾…

2026/7/1 5:17:22阅读更多 →
周报日报生成与办公效率工具应用指南

周报日报生成与办公效率工具应用指南

一、职场周报日报场景的效率痛点 职场中,周报日报是高频但耗时的工作环节。多数职场人写周报时,需从零散的工作记录、会议纪要、项目数据中汇总内容,回忆与整理占据大量时间;日报则因每日重复撰写,易陷入格式固化、内…

2026/7/1 5:17:22阅读更多 →
保姆级教程:用LLaMA Factory的Web UI,在单张V100上微调Yi-6B模型(附完整参数配置)

保姆级教程:用LLaMA Factory的Web UI,在单张V100上微调Yi-6B模型(附完整参数配置)

零门槛实战:在单卡V100上通过Web UI高效微调Yi-6B模型当大模型技术席卷全球时,许多开发者和研究者却被复杂的命令行操作和晦涩的参数配置挡在门外。本文将带你用最直观的Web界面,在一张V100显卡上完成Yi-6B模型的完整微调流程。无需担心显存不…

2026/7/1 5:17:22阅读更多 →
CAD二次开发中DoubleCollection用法详解

CAD二次开发中DoubleCollection用法详解

在 AutoCAD .NET API 中,DoubleCollection 是一个用于存储双精度浮点数集合的类,常用于定义多段线(Polyline)的顶点坐标或样条曲线的拟合点等。 核心用法 DoubleCollection 通常作为参数传递给需要一系列连续数值的构造函数或方…

2026/7/1 5:12:22阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/1 4:42:14阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/6/30 4:36:27阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/1 0:01:44阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/1 0:01:44阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/1 0:01:44阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/1 0:01:44阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/1 0:01:44阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/1 0:01:44阅读更多 →