结论先行:
在 Java 中,assert 默认是不生效的**,必须显式开启才会生效。
assert condition;
// 或
assert condition : "错误信息";
示例:
public class Test {
public static void main(String[] args) {
int x = -1;
assert x >= 0 : "x 不能为负数";
System.out.println(x);
}
}
Java 的断言是由 JVM 参数控制的,而不是默认开启的。
assert 语句会被 JVM 完全忽略所以上面代码即使 x = -1,也不会报错。
java -ea Test
或:
java -enableassertions Test
java -ea:com.example... Test
java -ea:com.example.Test Test
-ea
java -da Test
或:
java -disableassertions Test
示例:
assert list != null;
assert index >= 0 && index < size;
| 场景 | 原因 |
|---|---|
| 参数校验 | 可能被关闭 |
| 业务规则校验 | 会被忽略 |
| 生产环境 | 默认不生效 |
| 替代异常 | 不安全 |
❌ 错误示例:
public void setAge(int age) {
assert age > 0; // 可能被忽略
this.age = age;
}
✅ 正确做法:
public void setAge(int age) {
if (age <= 0) {
throw new IllegalArgumentException("年龄必须大于0");
}
this.age = age;
}
| 对比项 | assert | if + 异常 |
|---|---|---|
| 是否默认生效 | ❌ 否 | ✅ 是 |
| 是否用于生产 | ❌ 不适合 | ✅ 适合 |
| 是否可关闭 | ✅ 可 | ❌ 不可 |
| 语义 | 内部断言 | 业务异常 |
Java 的 assert 默认不生效,只有在 JVM 开启
-ea参数时才会生效,不适合用于生产环境的参数校验或业务逻辑。
如果你愿意,我也可以帮你总结 assert 在面试中的标准回答模板 或 和 JUnit 断言的区别对比。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。