何时使用OR以及何时在java中使用AND

时间:2018-03-12 20:22:27

标签: java

我正在修复一些尊重和冗余的空结果,并且只是在有人应该在if语句中使用AND或OR时才会感到好奇。

其中一项调查结果是if if语句

String firstName = db.getString("FIRST_NAME");
if(!((firstName == null) || firstName.equals(""))){
...
}

使用OR或AND(if(firstName != null && !firstName.equals(""))){})更有效吗?或者它通常只是个人偏好?

此外,如果有人可以指出该行如何取消引用也会很好

2 个答案:

答案 0 :(得分:4)

这是一项微观优化,对您的代码性能没有任何影响。由于JIT,JVM可能会在运行时对您的代码进行各种优化,例如:内联方法。你应该更喜欢你觉得更具可读性的东西,可能是StringUtils.isNotEmpty

变量db意味着您正在访问数据库,该数据库比简单的比较要贵一个数量级。或多或少:

Latency Comparison Numbers
--------------------------
L1 cache reference                           0.5 ns
Branch mispredict                            5   ns
L2 cache reference                           7   ns                      14x L1 cache
Mutex lock/unlock                           25   ns
Main memory reference                      100   ns                      20x L2 cache, 200x L1 cache
Compress 1K bytes with Zippy             3,000   ns        3 us
Send 1K bytes over 1 Gbps network       10,000   ns       10 us
Read 4K randomly from SSD*             150,000   ns      150 us          ~1GB/sec SSD
Read 1 MB sequentially from memory     250,000   ns      250 us
Round trip within same datacenter      500,000   ns      500 us
Read 1 MB sequentially from SSD*     1,000,000   ns    1,000 us    1 ms  ~1GB/sec SSD, 4X memory
Disk seek                           10,000,000   ns   10,000 us   10 ms  20x datacenter roundtrip
Read 1 MB sequentially from disk    20,000,000   ns   20,000 us   20 ms  80x memory, 20X SSD
Send packet CA->Netherlands->CA    150,000,000   ns  150,000 us  150 ms

答案 1 :(得分:2)

个人偏好。这两个语句如何转换为字节代码并在运行时环境中执行可能会发生变化。您获得的任何性能差异都可能微不足道。

你没有直接提出这个问题,但这只是De Morgan's laws的一个例子。