0

質問は非常に簡単です。

Object obj;

obj = new Object();

if(obj!=null) {
    // this means my object is *set*
}

もう一方

Object obj;
Boolean objSet = false;

obj = new Object();
objSet = true;

if(objSet) {
    // this means my object is *set*
}

どちらがより正しいですか。データベースと一部のメソッドの動作は、さまざまな方法で null になると聞いています。

4

2 に答える 2

6

「正しい」という言葉を選ぶことはできません。それがコンパイルされ、本来あるべきことを行うなら、それは正しいです。

有用性の問題として、より直接的なチェックを使用することをお勧めします。チェックの実行を避けるためにブール変数を追加する== nullと、余分な (最小限のオーバーヘッド)、行数が増え、読みにくくなり、エラーが発生する可能性があります。

条件を明示する必要があるほど複雑な場合は、ブール変数を追加します (vg.、一連の条件のすべて/いずれかが満たされていることを確認する必要がある場合)。

ところで、Booleanand notを使用しているため、適切にコーディングしないと null 自体booleanである可能性が導入されます。objSet

于 2013-03-05T00:22:48.473 に答える
3

どちらもより正確ではありません:

  • 行動セマンティクスの観点から、それらは同じことを行います...それらが正しく実装されていると仮定します。

  • パフォーマンスの観点からは、アプリケーション全体のコンテキストでは、違いはおそらく無視できます。

  • スペース使用の観点からは、違いはおそらく無視できます...objobjSetがフィールドであり、関連するクラスのインスタンスが非常に多くない場合を除きます。

  • 堅牢性の観点から (たとえば、予期しない NPE を回避するなど)、質的な違いはありません。テストを忘れると、どちらの場合でも NPE を取得できます。(変更するものを含めるように例を変更した場合obj、別のフラグを使用したバージョンはより複雑になるため、正しく理解するのが難しくなります。しかし、ロジックをセッターメソッドにカプセル化する場合は、正しく理解するだけで済みます一度 ...)

つまり、どのバージョンのコードがより読みやすいかということになります。そして、それは主観的なものなので、「より正確」とは言えません。ほとんどの経験豊富なプログラマーは、おそらくイディオムを認識し、最初のバージョンを好むでしょう。

于 2013-03-05T00:24:08.740 に答える