在编程中 !(~A && ~B) 比 (A||B) 更好吗?

Aru*_*pal 2 java if-statement intellij-idea demorgans-law

我正在开发Java并使用它IntelliJ作为我的 IDE。我写了一份if声明如下。

if( list1.size() >= 1 || list2.contains(itemX) ) {
    //do something
}
Run Code Online (Sandbox Code Playgroud)

IntelliJ建议进行转换 ( DeMorgan's Law),并将其转换为:

if( ! ( list1.size() < 1 && !( list2.contains(itemX) ) ) ) {
    //do something
}
Run Code Online (Sandbox Code Playgroud)

因此它应用了一种非常常见的离散数学理论来简化布尔表达式。我想知道这是如何优化的?

||如果第一部分本身为 true,则运算符无论如何不会执行整个条件,并且仅当第一部分为 false 时才执行 RHS。

改造后的条件是否有效?如何?

viz*_*tiz 5

这有些主观,但一个好的一般经验法则是尽可能消除复杂性。我所说的复杂性是指为了获得所需结果而需要执行的操作数量。

从这个意义上说,!a && !b这比!(a || b)在一种情况下你要否定 a 和 b,然后执行 OR 和运算符导致 3 次操作而更糟糕,而在后一种情况下,你只执行 2 次。当然,当你'我们谈论的是两种情况,但是当您处理许多情况时,这可能会产生很大的不同。

但在您的场景中,您的 IDE 更改它没有任何意义,因为后者的操作数量较少。可能是 IDE 试图拼命地吸引你:)

希望这是有道理的!