4

メンバー変数を検討してください:

String foo;

以前に設定されていないか、現在空であるsetFoo場合にのみ呼び出したいです。foo

この目的のために、これで十分かどうかはわかりません。

if(foo==null || foo.isEmpty()) {

  setFoo(foo);

}

または、OR 条件の反対側で null もチェックする方が安全ですか。

if(foo==null || (foo!=null && foo.isEmpty())) {

  setFoo(foo);

}
4

5 に答える 5

12

if(foo==null || foo.isEmpty())十分なものです。

論理 OR 条件では、Java は最初の部分が false の場合にのみ 2 番目の部分を評価します。

于 2011-09-04T18:28:13.090 に答える
4

いいえ、最初のスニペットは問題ありません。

Java (および C や C++ などの多くの同様の言語) では、論理演算子&&とは短絡評価||を実行します。の場合、左側のオペランドがの場合、右側のオペランドは評価されません。||true

于 2011-09-04T18:27:55.693 に答える
2

スタック オーバーフローへようこそ

のような演算子は||&&Java では短絡演算子であり、式の 2 番目の部分は、最初の部分が値を決定するのに十分でない場合にのみチェックされます。

それで、if(foo==null || foo.isEmpty())十分です。

于 2011-09-04T18:39:24.343 に答える
0

(Apache commons-langから)使用する方がエレガントだとStringUtils.isBlank(foo)思うので、 || は必要ありません。まったく。

于 2011-09-04T18:41:44.367 に答える
0
if (foo == null || foo.isEmpty()) setFoo(foo);

正常に動作します。この場合、foonull の場合はsetFoo(foo)呼び出されます。foonull ではなく、foo空の場合もsetFoo(foo)呼び出されます。

于 2011-09-04T18:27:54.807 に答える