' ... != null' 或 'null != ....' 最佳性能?

新手上路,请多包涵

我写了两种方法来检查性能

 public class Test1 {

 private String value;

 public void notNull(){
  if( value != null) {
    //do something
  }
}

public void nullNot(){
 if( null != value) {
  //do something
 }
}

}

并在编译后检查它的字节码

public void notNull();
Code:
Stack=1, Locals=1, Args_size=1
0: aload_0
1: getfield #2; //Field value:Ljava/lang/String;
4: ifnull 7
7: return
LineNumberTable:
line 6: 0
line 9: 7

StackMapTable: number_of_entries = 1
frame_type = 7 /* same */

public void nullNot();
Code:
Stack=2, Locals=1, Args_size=1
0: aconst_null
1: aload_0
2: getfield #2; //Field value:Ljava/lang/String;
5: if_acmpeq 8
8: return
LineNumberTable:
line 12: 0
line 15: 8

StackMapTable: number_of_entries = 1
frame_type = 8 /* same */

}

这里有两个操作码用于实现 if 条件:在第一种情况下,它使用 ifnull- 检查堆栈的顶部值是否为 null-,在第二种情况下,它使用 if_acmpeq- 检查堆栈中顶部的两个值是否相等-

那么,这会对性能产生影响吗? (这将帮助我证明 null 的第一个实现在性能方面以及可读性方面都很好:))

原文由 asela38 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 644
2 个回答

比较生成的字节码几乎没有意义,因为大多数优化都是在运行时使用 JIT 编译器进行的。我猜测在这种情况下,任一表达式都同样快。如果有任何区别,那可以忽略不计。

这不是您需要担心的事情。寻找全局优化。

原文由 polygenelubricants 发布,翻译遵循 CC BY-SA 2.5 许可协议

如果速度(或内存/无论什么情况)增益可以忽略不计,请不要以牺牲可读性为代价进行优化。我认为 !=null 通常更具可读性,所以使用它。

原文由 Cam 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏