1

これまでにリリースされたJavaバージョンのいずれかでパフォーマンスの違いがありましたか?

foo != null

null != foo?

個人的には、上記の 2 つの形式のオブジェクトの null チェックの動作に変更はないと思いますが、どちらのパフォーマンスが優れているかはわかりません。違いがあったとしても非常に小さいことはわかっていますが、なぜ誰かがすべてのコードをそのように書いたのか疑問に思っていました。

4

6 に答える 6

6

パフォーマンスの違いはないはずですが、フォームの読みやすさの観点からは foo != null の方が優れています。通常は左側に、右側の値と比較したいものを配置するためです。通常、foo などのオブジェクトと null を比較します。

于 2013-06-17T08:50:35.420 に答える
5

これは古いC時代から来ました。そして、それは foo == null (null == foo) で始まりました。

Cの構文は有効でした(コンパイラは文句を言いませんでした):

if (foo = null) {
}

この微妙なエラー構文を防ぐために、次の構文が使用され始めました。

if (null == foo) {
}

null は定数なので、この場合 (null = foo) { }

構文エラーになります。

Java では、これが問題になるケースは 1 つだけです。

boolean someBoolean;
if (someBoolean = true) {
}

実行時エラーですが、コンパイルされます

これ

boolean someBoolean;
if (true = someBoolean) {
}

コンパイルエラーです。

パフォーマンスの問題はなく、場合によってはエラー防止のみです。

于 2013-06-17T08:52:56.167 に答える
4

平等は対称です。したがって、順序は意味的に重要ではありません。

従来のスタイルでは、チェックしているものを最初に置き、定数を最後に置きます。これは、(少なくとも多くのヨーロッパの) 言語形式に従います。たとえば、"is x null?" です。「null x?」ではありません。

歴史のある時点で、人々if (NULL == x)はCで書いていました。これは、コンパイラがif (NULL = x)「定数に代入できない」と言って偶発的な構文エラーをキャッチするためでした。標準のコード品質ツールは、これらのタイプのエラーを検出できるようになったため、この方法は廃止されました。

于 2013-06-17T08:47:59.713 に答える
3

ファッションはヨーダ風。これは個人的な好みの問題です。

「Yoda 条件」— if (変数 == 定数) の代わりに if (定数 == 変数) を使用します。if (4 == foo) のように。「空が青いなら」とか「男が背が高いなら」と言っているようなものだからです。

SOの詳細

于 2013-06-17T08:46:50.800 に答える
2

いいえ、2 つの形式に違いはありません。

なんといっても、foo の値を読み込んで 0 (null) と比較し、比較結果を読み取るという命令があります。

今、それが equals() メソッドだったら、それは違うでしょう:)

于 2013-06-17T08:48:14.000 に答える