そこのパフォーマンスをチェックする2つの方法を書きました
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 条件を実装するために 2 つのオペコードが使用されます。最初のケースでは、ifnull を使用します- スタックの一番上の値が null であることを確認します- 2 番目のケースでは、if_acmpeq を使用します- スタックで上の 2 つの値が等しいことを確認します-
それで、これはパフォーマンスに影響を与えますか?(これは、null の最初の実装がパフォーマンスと読みやすさの面で優れていることを証明するのに役立ちます:))