两个断言表达式之间的区别?

ous*_*dri -1 java assert

运行时执行的两种情况有什么区别?

private void doStuff() {
assert (y > x);
// more code assuming y is greater than x
}

private void doStuff() {
assert (y > x): "y is " + y + " x is " + x;
// more code assuming y is greater than x
}
Run Code Online (Sandbox Code Playgroud)

Sot*_*lis 5

assert声明采用以下形式

assert Expression1 : Expression2 ;
Run Code Online (Sandbox Code Playgroud)

Java语言规范状态

否则,通过根据以下值进行选择继续执行Expression1:

  • 如果值为true,则不执行进一步操作,并且assert语句正常完成.

  • 如果值为false,则执行行为取决于是否 Expression2存在:

    • 如果Expression2存在,则进行评估.

      • 如果评估由于某种原因突然完成,则断言语句会因同样的原因而突然完成.

      • 如果评估正常完成,则会创建一个AssertionError实例,其"详细消息"是Expression2的结果值.

        • 如果实例创建由于某种原因突然完成,则assert语句因同样的原因突然完成.

        • 如果实例创建正常完成,则assert语句通过抛出新创建的AssertionError 对象而突然完成.

    • 如果Expression2不存在,AssertionError则创建没有"详细消息" 的实例.