这两个java行的jvm有什么区别:

joh*_*ode 1 java if-statement core

回顾旧代码的变化,我看到了一个非常有趣的变化.有区别:

if(retValue.equals("") || retValue == null){

if(retValue == null || retValue.equals("")){
Run Code Online (Sandbox Code Playgroud)

有什么建议?和jvm有什么区别?

谢谢.

Mik*_*unu 5

当然.有明显的区别.例如,在retValue为null的情况下,第一个将导致NullPointerException.


ass*_*ias 5

||&&运营商都"懒":JVM将尽快停止其表达的评价,因为它是某些结果.

  • 在这种情况下||,只要其中一个操作数为真,它就会停止==>整个表达式为真.
  • 在这种情况下&&,只要其中一个操作数为假,它就会停止==>整个表达式然后为假.

引用JLS#15.24(强调我的):

条件运算||符或运算符运算符类似于|(第15.22.2节),但仅在其左侧操作数的值为false时才计算其右侧操作数.