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

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

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