在 Java 里 assert 不生效,最常见的原因是:JVM 默认是关闭断言的。下面按“原因 → 如何开启 → 常见误区”给你系统说明一下。
assert 不是一定执行的代码,它受 JVM 参数控制:
所以你写了:
assert x > 0 : "x must be positive";
但运行时 什么都不会发生,即使 x <= 0。
java -ea MyApp
或:
java -enableassertions MyApp
如果是某些类或包:
java -ea:com.example... MyApp
关闭断言:
java -da MyApp
-ea
✅ 这是很多人“assert 不生效”的原因
assert condition;
编译后逻辑类似:
if (!condition) {
throw new AssertionError();
}
但前提是:
assert false; // 不一定抛异常
✅ 必须 -ea
assert param != null; // ❌ 不推荐
断言不是用来做参数校验的,因为:
✅ 正确做法:
if (param == null) {
throw new IllegalArgumentException("param is null");
}
assert list.remove(x); // ❌ 危险
如果断言关闭:
remove 根本不会执行✅ 断言里 不要有逻辑
✅ 适合用 assert 的场景
assert index >= 0 && index < array.length;
❌ 不适合用 assert 的场景
你可以对照一下:
-ea如果你愿意,可以把你的 代码片段 + 运行方式 发出来,我可以帮你精确判断为什么没生效。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。