当JVM在java程序中遇到断言语句时,它在内部做什么?

Vin*_*ani 2 java assert assertion

我是java中的断言概念的新手.我在哪里读过关于java中的断言概念,总是说,如果我们使用assert expression1:expression2,它将使用默认构造函数或AssertionError类中的七个构造函数之一,以防它失败. 但我怀疑的是,当assert语句失败时,谁实际上抛出了这个AssertionError错误?编译器是否会添加" throw new AssertionError(---) ",否则JVM将检查表达式并抛出AssertionError(如ArithmeticException,NullPointerException等...)?

kap*_*pex 6

该断言提议解释它:

断言语句[仅]是这个if语句的语法糖:

if ($assertionsEnabled && !(Expression1))
    throw new AssertionError(Expression2);
Run Code Online (Sandbox Code Playgroud)

$assertionsEnabled 是一个合成的布尔字段,也可以由编译器添加.

  • 这意味着JVM实际上并没有做任何特别的事情; 这是一个编译器功能. (3认同)