一、现象描述

在 IntelliJ IDEA 的 Debug 模式下,出现如下情况:

if (condition) 中 condition 明确为 false

if 代码块里的业务代码没有执行

但 Debug 高亮 / 单步执行 显示走到了 if 代码块的 continue; 行

实际循环并未发生 continue 的效果。

for(String str:stringList){
	if(value.contains(str)){
		System.out.print(1);
		continue;
	}
}

value.contains(str)为false,但是断点走到continue,但是并没打印1,没有实际执行if块中逻辑

二、结论(最重要)

断点“走到 continue”,不代表 continue 被执行
只要 if 内的代码没有执行,就说明 if 根本没有进入

这是 IDEA Debug 的显示错觉,不是 Java 逻辑错误。

三、根本原因

IDEA Debug 是按字节码行号映射显示的

if + continue 在字节码中只是跳转指令(goto)

多个跳转可能映射到同一源码行

JIT 优化(内联、重排序)

Debug 显示的“当前行” ≠ 实际源码执行语义

行断点的局限

命中的是“该行相关的字节码”

不等价于该源码语句真的被执行

四、如何判断是否真的执行了 continue?

唯一可靠方式:看实际副作用

println / 日志是否输出

循环是否真的被跳过

变量是否发生预期变化

👉 不要以 Debug 高亮位置作为判断依据

五、典型高风险场景

以下场景极易触发该问题:

循环中使用 if + continue / break

if 条件中是方法调用(如 contains())

if 体很短

断点打在 continue 行

Debug 模式 + JIT 开启(默认)

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐