【SWITCH】java中的switch,一直没发现的错误
关于 switch-case 的的使用误区
先看一段代码
Integer bb = 1; switch (bb){ case 1: System.out.println(1); case 2: System.out.println(2); default: System.out.println(3); }
会打印什么呢?
只打印 1, 还是会打印 123 呢?
答案是:123
我之前,一直会觉得它匹配完了,就过去了,比如说这里,bb 是1,它匹配到1,ok, 没问题,但是到了 case 2 的时候,它不是不匹配了吗,为什么它还是进去了呢?default,不是说只有没有任何一个项不匹配才进default 吗?上面不是明明有匹配到了,它干嘛还进去了? —— (暴露功底虚的事实)
嗯,
看这个结果
其实它是这样子的, switch-case 它从每一个匹配到的项,就开始往下执行,如果没有break 掉,它就会一直一直往下走,之后的每一个 case 无论是否能够匹配,它都会走,直到它遇到一个 beak, 而无论这个break 在接下来的哪个位置,都会退出。
比如下这样:
Integer bb = 1; switch (bb){ case 1: System.out.println(1); case 2: System.out.println(2); break; default: System.out.println(3); }
因为从case1 就命中了,就进入case1 的逻辑,但是因为 case1 的片断没有 break, 所以它会往下继续执行,并且不需要再判断,只要不break,就往下走,于是它就继续打印了2,然而在case2片断,它里面有了一个 break,于是它就跳出去了,就不用再往下执行。于是这个结果是打印 12.
emmmmm。。。。
真的是非常后知后觉啊。
(只能说,好在之前每个 case 都带了 break, 才没至于产生生产事故。。。。害。。)
分类:
java / 01-java基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南