性能影响,如果我写assert(!MyClass.desiredAssertionsStatus || ...)?

时间:2018-08-27 08:14:57

标签: java performance assert

只要可以正确停用它们,我就喜欢使用assert语句。

我听说如果在if语句中包装断言,编译器基本上会删除它们,因此它们没有影响。

if (MyClass.class.desiredAssertionStatus(){assert(xyz==true)}

但是,Intellij始终建议按照以下方式“简化”我的陈述:

assert(!MyClass.class.desiredAssertionStatus() || xyz==true);

我想知道intellij建议是否实际上可以对性能产生影响,即编译器是否不再识别要删除它们?

谢谢

2 个答案:

答案 0 :(得分:0)

使用启动标志在JVM级别启用和禁用资产。禁用后,它们基本上会被JVM跳过,并且不会影响性能。

因此,您不需要if语句。

答案 1 :(得分:0)

您的声明

if (MyClass.class.desiredAssertionStatus(){assert(xyz==true)}

看起来很费解,intellij建议却错过了您最有可能写的只是

assert xyz;

请注意,这等同于

if (CurrentClass.class.desiredAssertionStatus()) {
    if (!xyz) throw new AssertionError(...);
}

,除非您动态更改断言状态,如Holger所述),所以您要两次检查断言状态。当MyClass是当前类时,这是完全多余的,否则可能没有意义。