在 Java 中,assert 断言“不生效”是非常常见的问题,根本原因是:断言默认是关闭的。
Java 的断言(assert)默认在 JVM 中是禁用的,即使代码里写了:
assert x > 0 : "x must be positive";
如果没显式开启,这行代码相当于不存在,不会抛异常,也不会有任何提示。
java -ea MyProgram
或完整写法:
java -enableassertions MyProgram
java -ea:com.example... MyProgram
java -da MyProgram
Run → Edit Configurations-ea
Run → Run Configurations-ea
assert list != null;
list.size(); // 如果 assert 没开,这里可能 NPE
✅ 正确认知:
assert 只是开发期检查工具| 特性 | assert | if + throw |
|---|---|---|
| 默认生效 | ❌ 否 | ✅ 是 |
| 用于 | 内部逻辑校验 | 业务错误处理 |
| 性能 | 可完全关闭 | 永远存在 |
| 建议 | 开发调试 | 生产代码 |
✅ 生产环境请用异常,不要用 assert
public class Test {
public static void main(String[] args) {
int x = -1;
assert x > 0 : "x must be positive";
System.out.println("done");
}
}
不开启 -ea:
done
开启 -ea:
Exception in thread "main" java.lang.AssertionError: x must be positive
Java 的 assert 不生效,99% 是因为 JVM 没加
-ea参数。
如果你愿意,可以告诉我:
我可以帮你精准定位。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。