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

时间:2019-08-02 06:00:59

标签: java if-statement intellij-idea demorgans-law

我正在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
}

因此,它在简化布尔表达式时应用了非常普遍的离散数学理论。我想知道的是,这如何优化任何东西?

||运算符无论如何在第一部分本身为true时不执行全部条件,仅在第一部分为false时才执行RHS。

转化条件有效吗?怎么样?

2 个答案:

答案 0 :(得分:4)

这两个语句完全相同。

我同意如果第一部分为TRUE,则OR运算符不会评估第二部分,但是,如果第一部分为FALSE,则AND运算符也不会评估第二部分。

实际上,与A || B相比,评估〜(〜A &&〜B)会花费更多的时间和空间。

希望这会有所帮助:)

答案 1 :(得分:4)

这有点主观,但是一个好的通用经验法则是消除尽可能多的复杂性。所谓复杂性,是指您需要执行多少操作才能获得所需的结果。

从这个意义上讲,!a && !b!(a || b)差,因为在一种情况下,您对a和b取反,然后执行and运算符,导致3次操作,而在后一种情况下,您仅执行2。当然,当您谈论两个条件时,这是虚无的,但是当您处理许多条件时,这可能会产生很大的不同。

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

希望这很有意义!