break和continue的区别?

💡 一则也许对你有用的小广告 🏆

欢迎飞飞程序员   ,你将获得:专属的实战项目(已更新的所有会员标识的项目都能学习) / 1v1 提问 / Java 学习路线 / PHP 学习路线 / 学习打卡 / 社群讨论

  • 正在进行中的项目:《FFBlog知识付费博客项目》 正在持续更新中,基于 Spring Boot 3.x + JDK 21...,点击查看 ;
  • 《从零开发:FFBlog知识付费博客项目(全栈开发)》 演示链接: https://ffblog.ffcxy.com/  ;

截止目前, 飞飞  正在疯狂爆肝实战项目,后续还会上新更多项目,目标是将所学知识开发成项目并且分享给大家,如知识付费系统, Ai系统, CMS系统,在线商城系统,等等 ,欢迎点击围观

这题考什么

  • 基础分:能不能一句话说清两者语义差别,别绕。这题是筛选题,说糊了后面追问会被压着打。
  • 细节分:continue 之后 i++ 到底执不执行、while 里 continue 会不会死循环、switch 里的 break 算什么。
  • 加分项:带标签的 break / continue 能跳几层、跟 return 的边界在哪。面试官想听的是你真的写过、踩过坑,不是背定义。

先说结论

break 是直接结束最近的那层循环(或 switch),continue 是只跳过本次循环剩下的语句,进入下一次迭代;两者都只影响当前所在的那一层,不加标签跳不出外层。

差别到底在哪

维度 break continue
作用结果 结束整个循环,程序走到循环后面 只结束本次迭代,循环继续
循环变量 后续不再更新 仍会走到更新语句(for 的 i++ 照执行)
作用范围 最近的一层 for/while/do-while 或 switch 最近的一层循环(不能用于 switch 之外的普通块)
典型用途 找到目标就退出、超时熔断、switch 防穿透 跳过非法数据、过滤、提前进入下一轮
加标签 可以跳任意多层,标签可挂在任意语句块上 可以跳多层,但标签必须挂在循环语句上

说白了:break 是「收工了」,continue 是「这一条不算,下一条」。

for (int i = 0; i < 10; i++) {
    if (i == 3) continue; // 跳过 3
    if (i == 7) break;    // 到 7 收工
    System.out.println(i);
}
// 输出: 0 1 2 4 5 6

循环里它俩怎么走的

关键是记住:continue 不是「回到循环开头」,而是「回到迭代的收尾动作」。在 for 循环里收尾动作就是 i++,在 while/do-while 里就是条件判断。

所以 for 里 continue 是安全的,i++ 照跑;while 里把更新语句写在 continue 后面,就可能死循环。

两个容易翻车的地方

1. while + continue 死循环

int i = 0;
while (i < 5) {
    if (i % 2 == 0) continue; // i 永远不更新,卡死在这
    i++;
}

改成 for 或者把 i++ 提到 continue 之前就没这事。do-while 里的 continue 是跳到条件判断,条件照样会判,不会直接无限执行循环体。

2. 标签:跳多层循环

Java 没有 goto,但有标签语句,专门解决「双层循环里找到就全退」这类需求:

outer:
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        if (i == 1 && j == 1) break outer; // 直接跳出两层
        if (j == 2) continue outer;        // 结束本轮, 跳到外层 i++
        System.out.println(i + "-" + j);
    }
}

注意两点:break 后的标签可以挂在任意语句块上,continue 后的标签必须挂在循环上,否则编译不过;标签语法是 名字:,跟 switch 里的 case 标签完全两码事。

面试高频追问

break 能跳出几层循环? 默认只跳最近一层,写成 break 标签 可以跳任意多层,但跳不出当前方法,方法边界是硬的。

continue 后面的代码还执行吗? 本次循环不执行了,但 for 的 i++ 会执行,然后回到条件判断。

switch 里的 break 是干嘛的? 防止 case 穿透,跳出整个 switch。switch 里只能用 break(或 return、throw),不能用 continue,因为 continue 是给循环用的;不过在循环里的 switch 里写 continue,作用的是外层循环。

break 和 return 什么区别? break 只结束循环或 switch,后面代码继续跑;return 直接结束整个方法,连后面的代码都不执行。

break 后面还能写代码吗? 不能,属于不可达代码,编译器直接报 unreachable statement。同理 while (true) 后面如果没 break,下面的代码也算不可达。

带标签的 continue 有什么限制? 标签必须标在循环语句上,写在普通代码块上编译不过。break 的标签则可以是任意语句块。

do-while 里 continue 会怎样? 跳到条件判断,条件还是会判一次,不是无脑再执行一遍循环体。

怎么记:break 是「跳出这个循环」,continue 是「跳过这次循环的后半段」。两条都只管最近那一层,要管更外层就得上标签。

全部评论(0)

头像
😃 😁 😅 😂 😍 😜 😝 🤑 🥵 🥰 😙 😎 😵 😭 😱 😖 🥳 👽 🙈 🤡 😤 💣 💯 💢 ❤️ 👍 👏 👋 👌 🤏 🙏
还没有任何评论哟~
微信扫一扫
微信二维码
微信客服
QQ 咨询
QQ二维码
工作日 9:00 - 18:00 在线
QQ客服
在线工单
提交问题工单,我们会尽快回复处理。
提交工单
在线工单
目录