在 Java 中,assert 断言默认是被忽略(不生效)的,这是一个非常常见的问题。原因主要有以下几点:
Java 的 assert 关键字是在 JDK 1.4 才引入的,为了兼容旧代码,默认情况下 JVM 不会启用断言。
也就是说:
assert x > 0 : "x must be positive";
如果 JVM 没有开启断言,这行代码 相当于不存在,不会执行,也不会抛异常。
要让 assert 生效,必须在运行程序时加上参数:
java -ea MyProgram
或
java -enableassertions MyProgram
java -ea:com.example... MyProgram
java -ea -da:com.example.test... MyProgram
✅ 没加 -ea,断言一定被忽略
很多人在 IDE(IDEA / Eclipse)里直接运行:
assert false;
但 Run Configuration 里 没有加 -ea,所以没有任何效果。
✅ 解决:
Run → Edit Configurations → VM options → -eaRun Configurations → Arguments → VM arguments → -eaassert equals(a, b);
JUnit 里这仍然依赖 JVM 断言开关。
✅ 正确做法:
Assert.assertEquals-ea很多生产环境 明确不启用 -ea,因为:
AssertionError✅ 所以:断言只适合开发和测试阶段
当启用断言且条件为 false:
assert false : "should not reach here";
会抛出:
java.lang.AssertionError: should not reach here
注意:
Error 不是 Exceptionif + throw 的区别// 断言(开发期检查)
assert param != null;
// 正式校验(生产期也必须生效)
if (param == null) {
throw new IllegalArgumentException("param is null");
}
✅ 断言:假设不可能发生 ✅ 异常:可能发生,必须处理
Java 的 assert 默认不生效,必须加
-ea才会执行;它用于开发期调试,不应用于生产逻辑校验。
如果你愿意,我可以:
assert vs JUnit Assert vs Objects.requireNonNull免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。