我正在修复一些尊重和冗余的空结果,并且只是在有人应该在if语句中使用AND或OR时才会感到好奇。
其中一项调查结果是if if语句
String firstName = db.getString("FIRST_NAME");
if(!((firstName == null) || firstName.equals(""))){
...
}
使用OR或AND(if(firstName != null && !firstName.equals(""))){}
)更有效吗?或者它通常只是个人偏好?
此外,如果有人可以指出该行如何取消引用也会很好
答案 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的一个例子。