哪个更快:"null == myObject"或"myObject == null"?

joh*_*eur 2 .net java null control-structure operator-precedence

在Java和.Net中,我听说首先使用null if (null == myObject)比首先使用对象更有效if (myObject == null).虽然我认为这可能是真的,但我不确定并希望了解SO用户.就个人而言,我认为如果首先引用该对象会更好,但如果首先使用null会有任何性能提升,我会选择相应的.

Den*_*ret 7

他们完全一样.如果存在差异,任何编译器都会进行交换,因为绝对没有功能差异.


mat*_*tts 5

令人惊讶的是,它们在Java中的编译方式不

if (myObject == null);
if (null == myObject);
Run Code Online (Sandbox Code Playgroud)

编译成

 8 aload_1
 9 ifnonnull 12 (+3)
12 aconst_null
13 aload_1
14 if_acmpne 17 (+3)
Run Code Online (Sandbox Code Playgroud)

(这是使用编译的javac 1.6.0_24.)

首先放置对象引用会产生两条指令,并将null第一条结果放在三条指令中.在此基础上,if (myObject == null) 可能会更快.

然而,正如ThorbjørnRavnAndersen所指出的,当使用JIT编译器时,字节码指令的数量并不多,因为字节码在执行之前将被转换为本机代码.即使存在性能差异,我也怀疑它是否可以衡量.

  • 如果JVM使用JIT编译器,则无法根据字节代码数决定执行速度. (2认同)