只要可以正确停用它们,我就喜欢使用assert语句。
我听说如果在if语句中包装断言,编译器基本上会删除它们,因此它们没有影响。
if (MyClass.class.desiredAssertionStatus(){assert(xyz==true)}
但是,Intellij始终建议按照以下方式“简化”我的陈述:
assert(!MyClass.class.desiredAssertionStatus() || xyz==true);
我想知道intellij建议是否实际上可以对性能产生影响,即编译器是否不再识别要删除它们?
谢谢
答案 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
是当前类时,这是完全多余的,否则可能没有意义。