Javaでは、どちらがより効果的ですか?違いは何ですか?
if (null == variable)
または
if (variable == null)
(この質問と同様: null == objectとobject == nullの違い )
これら2つの式のパフォーマンスにまったく違いはないと思います。
ただし、興味深いことに、コンパイルされたバイトコード(OpenJDKのjavacによって出力される)は、2つの場合で少し異なります。
ために boolean b = variable == null
:
3: aload_1 // load variable
4: ifnonnull 11 // check if it's null
7: iconst_1 // Push 1
8: goto 12
11: iconst_0 // Push 0
12: istore_2 // store
ために boolean b = null == variable
:
3: aconst_null // Push null
4: aload_1 // load variable
5: if_acmpne 12 // check if equal
8: iconst_1 // Push 1
9: goto 13
12: iconst_0 // Push 0
13: istore_2 // store
@Bozhoが言うように、variable == null
は、最も一般的なデフォルトの優先スタイルです。
ただし、特定の状況では、null
を前に置く傾向があります。たとえば、次の場合:
String line;
while (null != (line = reader.readLine()))
process(line);
これは "Yoda Conditions" と呼ばれ、目的は誤って代入(=
)同等性チェックの代わりに(==
)。
変わりはない。
if (variable == null)
は(imo)より優れたプログラミングスタイルです。
null
はJavaでは小文字であることに注意してください。
変わりはない
(null == variables)
は、書き込みを避けるために古き良き時代(C言語)で時々使用されていました:(variable = NULL)
間違って
簡単な答え:違いはありません。
長い答え:かなり主観的な文体の違いがあります。一部の人々は、==
into =
。一部の人々は、定数はより自然で読みやすいため、右側にあるべきだと主張しています。
適切に設計された言語と優れたコンパイラおよび静的分析ツールを組み合わせることで、偏執症を最小限に抑えることができるため、最も読みやすく自然なコードを記述する必要があります。
次回は検索機能を使用してください。
1つ目は、Cからのハングオーバーであり、if(variable = NULL)
を記述することは完全に合法です。
パフォーマンスの観点から重要な違いはありません。
ただし...タイプミスをして、単一の等号文字を逃した場合はどうなりますか?
foo = null; // assigns foo to null at runtime... BAD!
versus
null = foo; // compile time error, typo immediately caught in editor,
developer gets 8 hours of sleep
これは、左側にnullを指定してifテストを開始することを支持する1つの引数です。
Nullでifテストを開始することを支持する2番目の引数は、等号の右側の式が冗長であっても、nullテストを見ていることをコードの読者に非常に明確にすることです。
@ aioobaもこの2番目の引数を指摘しています:
ただし、特定の状況では、ヌルを前に置く傾向があります。たとえば、次の場合:
String line;
while (null != (line = reader.readLine()))
process(line);
私の意見:このような取るに足らないパフォーマンスの最適化については気にしないでください。パフォーマンスが悪い場合は、コード内の実際の問題/ボトルネックを見つけてターゲットにします。