关于 Java 的三目运算符 a ? b : c
。
之前在想,三目运算符和 if
语句哪个的效率更高一些,所以搜了一些文章。
其实可以从效率和代码可读性两方面来考虑,都需要根据具体情况具体分析,没有一般性的结论。
从效率角度来说,大多数情况下应该差距不大,因为,Java 编译器也做了一些优化,编译之后生成的字节码很有可能是几乎一样的。不过有些时候三目运算符中还会涉及到类型转换,自动拆装箱等问题。
从代码可读性来说,有些情况下三目运算符更具有可读性,有些情况下 if
语句更具有可读性,不能一概而论。
一个小测试
我也写了一个小测试跑了一下,发现基本情况下,两者效率相当。
测试代码如下。
1 | public class TestIfElse { |
运行结果:
1 | If / Ternary Time Ratio 1.166429: in 10 times iteration |
如果多运行几次,有时候会发现在某个量级上出现差距很大的情况,我觉得有可能是在某个时刻 JVM 虚拟机进程时间片用完了,JVM 在等待队列中的时间也被算进去了,导致在某个量级上差距比较大,通过调整循环的初始值,比如从 100 调到 10000,这种差距大的情况可能就不见了。