什么是assert做?

private static int charAt(String s, int d) {
    assert d >= 0 && d <= s.length();
    if (d == s.length()) return -1;
    return s.charAt(d);
}

答案

如果你启动你的程序-enableassertions(或者-ea简称)然后这个声明

assert cond;

相当于

if (!cond)
    throw new AssertionError();

如果您在没有此选项的情况下启动程序,则断言语句将不起作用。

例如,assert d >= 0 && d <= s.length();正如您的问题中所发布的,相当于

if (!(d >= 0 && d <= s.length()))
    throw new AssertionError();

(如果您启动时使用的是-enableassertions那是。)


正式,Java 语言规范:14.10。assert陈述说以下几点:

14.10. The assert Statement
断言是一个assert包含布尔表达式的语句。either enabled or disabledan error is reported 如果表达式的计算结果为false

在哪里*“启用或禁用”* 控制与-ea开关和*“报告错误”* 意味着一个AssertionError被抛出。


最后,还有一个鲜为人知的功能assert:

您可以附加: "Error message"像这样:

assert d != null : "d is null";

指定抛出的 AssertionError 的错误消息应该是什么。


这篇文章已被重写为一篇文章这里

来自: stackoverflow.com