我最近看到this问题并认为提出问题的人在某种程度上是正确的。答案告诉我们不应使用断言来执行程序中的任何任务。
但是断言可以充当维护循环不变量和程序不变量的简单衬里,以便我们可以在一定程度上检查程序的正确性。
即使我们有 if else,为什么断言也是必要的?它只是测试一个 boolean 表达式,类似的事情可以通过 if -else 梯子来完成,那么为什么还要创建一个新的关键字断言呢?
最佳答案
“程序中的任务”在上下文中意味着应该完成并且最好进行测试的事情。
不仅是:
assert p != null
比以下内容更短更简单:
if (p == null) throw new IllegalArgumentException("p is null");
使其成为断言,清楚地记录了它是内部约束而不是指定行为的事实。因此您不需要另外 4 行来测试它。
当然,有时明确指定的行为正是您想要的,例如公共(public)长期 API。
换句话说,虽然它们很相似,但在 if/throw 正确的情况下使用断言有点错误,反之亦然。
尽管如此,许多 Java 代码并不关心断言,因为这样就少了一个需要做出的决定。我不确定如果它不存在的话它是否会被添加到语言中......
关于java - 断言可用于维护循环不变量和检查程序正确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28634192/