我正在開發(fā)Java,我正在使用它IntelliJ作為我的 IDE。我寫了一個if聲明如下。if( list1.size() >= 1 || list2.contains(itemX) ) { //do something}IntelliJ建議轉(zhuǎn)換 ( DeMorgan's Law) 并將其轉(zhuǎn)換為:if( ! ( list1.size() < 1 && !( list2.contains(itemX) ) ) ) { //do something}所以它應(yīng)用了一種非常普遍的離散數(shù)學(xué)理論來簡化布爾表達式。我想知道的是這如何優(yōu)化任何東西?||如果第一部分本身為真,運算符無論如何不會執(zhí)行整個條件,并且僅當(dāng)?shù)谝徊糠譃榧贂r才執(zhí)行 RHS。轉(zhuǎn)化后的條件是否有效?如何?
2 回答

江戶川亂折騰
TA貢獻1851條經(jīng)驗 獲得超5個贊
這有點主觀,但一個好的一般經(jīng)驗法則是盡可能多地消除復(fù)雜性。所謂復(fù)雜性,是指您需要執(zhí)行多少操作才能獲得所需的結(jié)果。
從這個意義上說,!a && !b
這比!(a || b)
因為在一種情況下你否定 a 和 b,然后執(zhí)行 OR 和運算符導(dǎo)致 3 個操作,而在后一種情況下,你只執(zhí)行 2 個操作。當(dāng)然這是空洞的,當(dāng)你'我們談?wù)摰氖莾煞N情況,但是當(dāng)你處理很多情況時,這會產(chǎn)生很大的不同。
但是在您的場景中,您的 IDE 更改它沒有任何意義,因為后者的操作數(shù)量較少??赡苁?IDE 試圖拼命吸引你 :)
希望這是有道理的!

莫回?zé)o
TA貢獻1865條經(jīng)驗 獲得超7個贊
兩者都是完全相同的陳述。
我同意如果第一部分為真,則 OR 運算符不會評估第二部分,但是,如果第一部分為假,AND 運算符也不會評估第二部分。
事實上,與 A||B 相比,評估 ~(~A && ~B) 將花費更多的時間和空間。
希望這可以幫助 :)
添加回答
舉報
0/150
提交
取消