web-dev-qa-db-ja.com

どちらがより効果的ですか:if(null == variable)またはif(variable == null)?

Javaでは、どちらがより効果的ですか?違いは何ですか?

if (null == variable)

または

if (variable == null)
41
Apache

(この質問と同様: 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);
66
aioobe

これは "Yoda Conditions" と呼ばれ、目的は誤って代入(=)同等性チェックの代わりに(==)。

18
Edward Dale

変わりはない。

if (variable == null)は(imo)より優れたプログラミングスタイルです。

nullはJavaでは小文字であることに注意してください。

16
Bozho

変わりはない

(null == variables)は、書き込みを避けるために古き良き時代(C言語)で時々使用されていました:(variable = NULL) 間違って

12
dfens

簡単な答え:違いはありません。

長い答え:かなり主観的な文体の違いがあります。一部の人々は、== into =。一部の人々は、定数はより自然で読みやすいため、右側にあるべきだと主張しています。

適切に設計された言語と優れたコンパイラおよび静的分析ツールを組み合わせることで、偏執症を最小限に抑えることができるため、最も読みやすく自然なコードを記述する必要があります。

関連する質問

次回は検索機能を使用してください。

8

1つ目は、Cからのハングオーバーであり、if(variable = NULL)を記述することは完全に合法です。

7
Robert

パフォーマンスの観点から重要な違いはありません。

ただし...タイプミスをして、単一の等号文字を逃した場合はどうなりますか?

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);
4

私の意見:このような取るに足らないパフォーマンスの最適化については気にしないでください。パフォーマンスが悪い場合は、コード内の実際の問題/ボトルネックを見つけてターゲットにします。

1
chiccodoro