性能影响,如果我写 assert(!MyClass.desiredAssertions)

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

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

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

然而,Intellij 总是建议“简化”我的陈述如下:

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

我想知道,intellij 建议是否真的会对性能产生影响,即编译器是否不再识别以删除它们?


慕田峪9158850
浏览 221回答 2
2回答

杨__羊羊

使用启动标志在 JVM 级别启用和禁用断言。当禁用它们时,JVM 基本上会跳过它们,并且不会对性能产生影响。因此,您不需要 if 语句。

倚天杖

你的陈述if (MyClass.class.desiredAssertionStatus(){assert(xyz==true)}看起来很复杂,intellij 的建议忽略了你最有可能应该写的只是assert xyz;请注意,这等效于if (CurrentClass.class.desiredAssertionStatus()) {    if (!xyz) throw new AssertionError(...);}(除非您像 Holger 指出的那样动态更改断言状态),因此您要检查断言状态两次。当MyClass是当前类时,这是完全多余的,否则可能是荒谬的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java