Java 是(A&;&;&;&;&;&;&;&;&;&;&;&;&;&;&;&;&;&;&;&;&;&;&;&;&;B)?

Java 是(A&;&;&;&;&;&;&;&;&;&;&;&;&;&;&;&;&;&;&;&;&;&;&;&;&;B)?,java,if-statement,intellij-idea,demorgans-law,Java,If Statement,Intellij Idea,Demorgans Law,我在Java中开发,并且使用IntelliJ作为我的IDE。我写了一个if语句如下 if(list1.size()>=1 | | list2.contains(itemX)){ //做点什么 } IntelliJ建议进行转换(DeMorgan定律),并将其转换为: if(!(list1.size()

我在
Java
中开发,并且使用
IntelliJ
作为我的IDE。我写了一个
if
语句如下

if(list1.size()>=1 | | list2.contains(itemX)){
//做点什么
}
IntelliJ
建议进行转换(
DeMorgan定律
),并将其转换为:

if(!(list1.size()<1&&!(list2.contains(itemX))){
//做点什么
}
因此,它应用了一种非常常见的离散数学理论来简化布尔表达式。我想知道的是,这是如何优化任何东西的

|
操作符无论如何都不会在第一部分本身为真时执行整个条件,并且仅在第一部分为假时执行RHS


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

这两种说法完全相同

我同意,如果第一部分为真,OR运算符不计算第二部分,但是,如果第一部分为假,AND运算符也不计算第二部分

事实上,与A | | B相比,评估(~A&&&B)需要更多的时间和空间


希望这有帮助:)

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

从这个意义上说,
!a&&!b
更糟糕!(a | | b)
因为在一种情况下,你对a和b求反,然后执行and运算符,得到3个运算,而在后一种情况下,你只执行2个运算。当然,当你谈论两种情况时,这是空洞的,但是当你处理许多情况时,这会产生很大的不同

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


希望这有意义

即使是
操作符,如果第一个条件为false,它也不会计算第二个条件,因为它知道这两种编写条件的方法可能有什么不同。您担心的是错误的事情。使用最具可读性且符合您意图的内容。两者在性能上是相同的,但第一个显然更具可读性。请将其作为答案发布,我会标记它。JB Nizet或user207421。这是一个
意图
,但文档中说“.搜索优化它的方法…”。因此,我想知道在我的情况下,一个怎么可能比另一个更好?