慕田峪9158850
2021-08-13 17:00:03
我喜歡使用 assert 語句,只要我能正確停用它們。我聽說如果在 if 語句中包裝斷言,編譯器基本上會將它們刪除,因此它們沒有影響。if (MyClass.class.desiredAssertionStatus(){assert(xyz==true)}然而,Intellij 總是建議“簡化”我的陳述如下:assert(!MyClass.class.desiredAssertionStatus() || xyz==true);我想知道,intellij 建議是否真的會對性能產(chǎn)生影響,即編譯器是否不再識別以刪除它們?
2 回答

楊__羊羊
TA貢獻(xiàn)1943條經(jīng)驗 獲得超7個贊
使用啟動標(biāo)志在 JVM 級別啟用和禁用斷言。當(dāng)禁用它們時,JVM 基本上會跳過它們,并且不會對性能產(chǎn)生影響。
因此,您不需要 if 語句。

倚天杖
TA貢獻(xiàn)1828條經(jīng)驗 獲得超3個贊
你的陳述
if (MyClass.class.desiredAssertionStatus(){assert(xyz==true)}
看起來很復(fù)雜,intellij 的建議忽略了你最有可能應(yīng)該寫的只是
assert xyz;
請注意,這等效于
if (CurrentClass.class.desiredAssertionStatus()) {
if (!xyz) throw new AssertionError(...);
}
(除非您像 Holger 指出的那樣動態(tài)更改斷言狀態(tài)),因此您要檢查斷言狀態(tài)兩次。當(dāng)MyClass是當(dāng)前類時,這是完全多余的,否則可能是荒謬的。
添加回答
舉報
0/150
提交
取消