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

2022-08-31 19:44:43

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

 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的第一个实现在性能方面以及在可读性方面都很好:))


答案 1

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

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


答案 2

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


推荐