Java不等于(!=)性能差异

Mic*_*hez 5 java

我一直在作为Java开发人员的第一份工作中学习,以避免使用"!=",而是使用空if子句然后将逻辑放在else中:

//Bad:
if (x != null) {
   // logic
}

//Good:
if (x == null){
} else {
  // logic
}
Run Code Online (Sandbox Code Playgroud)

我们的首席开发人员的推理是避免不必要的位切换,特别是对于像空检查这样的简单逻辑.

我一直在寻找说明这一点的消息来源,但我似乎找不到任何消息.空if子句练习真的是"最佳实践"还是只是偏好?

Sot*_*lis 10

IMO,这是微优化的失败尝试.

编译代码

public static void main(String... args) {
    Object x = null;
    //Bad:
    if (x != null) {
       // logic
    }

    //Good:
    if (x == null){
    } else {
      // logic
    }
}
Run Code Online (Sandbox Code Playgroud)

并检查 javap

  public static void main(java.lang.String...) 
    descriptor: ([Ljava/lang/String;)V
    flags: ACC_PUBLIC, ACC_STATIC, ACC_VARARGS
    Code:
      stack=1, locals=2, args_size=1
         0: aconst_null
         1: astore_1
         2: aload_1
         3: ifnull        6
         6: aload_1
         7: ifnonnull     10
        10: return
      LineNumberTable:
        line 9: 0
        line 11: 2
        line 16: 6
        line 20: 10

  }
Run Code Online (Sandbox Code Playgroud)

两者都跳到另一个分支.表现没有什么不同.IMO,你的代码的可读性受到了影响.

如果x为null,则为blah,否则为逻辑.