これまでにリリースされたJavaバージョンのいずれかでパフォーマンスの違いがありましたか?
foo != null
と
null != foo
?
個人的には、上記の 2 つの形式のオブジェクトの null チェックの動作に変更はないと思いますが、どちらのパフォーマンスが優れているかはわかりません。違いがあったとしても非常に小さいことはわかっていますが、なぜ誰かがすべてのコードをそのように書いたのか疑問に思っていました。
これまでにリリースされたJavaバージョンのいずれかでパフォーマンスの違いがありましたか?
foo != null
と
null != foo
?
個人的には、上記の 2 つの形式のオブジェクトの null チェックの動作に変更はないと思いますが、どちらのパフォーマンスが優れているかはわかりません。違いがあったとしても非常に小さいことはわかっていますが、なぜ誰かがすべてのコードをそのように書いたのか疑問に思っていました。
パフォーマンスの違いはないはずですが、フォームの読みやすさの観点からは foo != null の方が優れています。通常は左側に、右側の値と比較したいものを配置するためです。通常、foo などのオブジェクトと null を比較します。
これは古い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) {
}
コンパイルエラーです。
パフォーマンスの問題はなく、場合によってはエラー防止のみです。
平等は対称です。したがって、順序は意味的に重要ではありません。
従来のスタイルでは、チェックしているものを最初に置き、定数を最後に置きます。これは、(少なくとも多くのヨーロッパの) 言語形式に従います。たとえば、"is x null?" です。「null x?」ではありません。
歴史のある時点で、人々if (NULL == x)
はCで書いていました。これは、コンパイラがif (NULL = x)
「定数に代入できない」と言って偶発的な構文エラーをキャッチするためでした。標準のコード品質ツールは、これらのタイプのエラーを検出できるようになったため、この方法は廃止されました。
ファッションはヨーダ風。これは個人的な好みの問題です。
「Yoda 条件」— if (変数 == 定数) の代わりに if (定数 == 変数) を使用します。if (4 == foo) のように。「空が青いなら」とか「男が背が高いなら」と言っているようなものだからです。
いいえ、2 つの形式に違いはありません。
なんといっても、foo の値を読み込んで 0 (null) と比較し、比較結果を読み取るという命令があります。
今、それが equals() メソッドだったら、それは違うでしょう:)