13

次の 2 行のコードを検討してください。

if (test ! = null)

if (null != test)

パフォーマンスに関して、上記の2つのステートメントに違いはありますか? 私は多くの人が後者を使用しているのを見てきました.

4

8 に答える 8

22

変わりはない。

2 つ目は、プログラマーが常に比較ではなく代入を行う C/C++ が原因です。

例えば

// no compiler complaint at all for C/C++
// while in Java, this is illegal.
if(a = 2) {
}
// this is illegal in C/C++
// and thus become best practice, from C/C++ which is not applicable to Java at all.
if(2 = a) {
}

Javaコンパイラはコンパイルエラーを生成しますが。

だから私は個人的に読みやすさのために最初のものを好みます.人々は左から右に読む傾向がありif test is not equal to nullnull is not equal to test.

于 2012-05-08T07:41:54.500 に答える
22

それらはまったく同じです。2 番目のものは、equals を使用する場合に意味があります。

if("bla".equals(test))

while をスローすることはできませんNullPointerException:

if(test.equals("bla")) 

できる。

于 2012-05-08T07:41:56.447 に答える
3

パフォーマンスの違いはありませんが、個人的には 2 番目の違いがややこしく感じます。

于 2012-05-08T07:41:28.540 に答える
2

2 つ目は「ヨーダ条件」のように見えます。つまりif(2 == x) ...、読みにくいです。

于 2012-05-08T07:41:18.230 に答える
1

後者を使用するのはベスト プラクティスではありません。どちらも同等ですが、前者の方が読みやすいです。

この「ベスト プラクティス」は、ブール値が存在しない C に由来します。代わりに整数が使用されif (foo = 1)、構文エラーではありませんが、 とは完全に異なりif (foo == 1)ます。

Java では、ブール式のみが if の中に入れることができ、この方法はあまり意味がありません。

于 2012-05-08T07:43:56.150 に答える
1

ほとんどの最新の IDE で検出される基本的なタイプミスを避けるのがベスト プラクティスです。これは、null ではないより複雑な型を比較したい場合があり、偶発的な代入を行ってしまうことがあるためです。したがって、パターンは同じままですが、これがパフォーマンスにリンクされているのを見たことがなく、特別なバイト コードが生成されるのを見たことがありません。

アイデアは、最初に静的な既知の値を取得することです。そのため、比較を実行するときに奇妙な例外をスローすることはできません。

ただし、どちらの方法も「より正確」というわけではないため、どちらを使用するかは完全にあなた次第です。

于 2012-05-08T07:41:51.613 に答える
1

違いはありません。しかし、2 番目の方法では、 のようなタイプミスを回避できますtest = null。2 番目の方法では、コンパイラ エラーが発生するためです。

于 2012-05-08T07:42:01.520 に答える
0

2つの形式に実際の違いはありません。パフォーマンスの問題はありませんが、次の注意事項があります。

  • 人々は通常コードを左から右に読むので、最初の形式はコードリーダーで読むことができます。
  • 2番目の形式はコードライターに適しています。Javaでは演算子は=代入用であり、==演算子はテストと同等のものですが、nullは代入ステートメントで使用できないため、2番目のアプローチ開発者が取得する代わりに通常はifステートメントで使用します。===Compile-Time-ErrorLeft-Side
于 2012-05-08T08:04:10.743 に答える