1. ホーム
  2. java

[解決済み] IF文の&&(AND)と|OR|(OR)

2022-03-05 07:36:17

質問

次のようなコードがあります。

if(!partialHits.get(req_nr).containsKey(z) || partialHits.get(req_nr).get(z) < tmpmap.get(z)){  
    partialHits.get(z).put(z, tmpmap.get(z));  
}

ここで partialHits はHashMapです。
最初の文が真である場合、何が起こるか? Javaは2番目のステートメントもチェックするのでしょうか? なぜなら、最初のステートメントが真であるためには、HashMapに与えられたキーが含まれていてはならないからです。したがって、2番目のステートメントをチェックすると NullPointerException .
つまり、簡単に言うと、次のようなコードがあるとします。

if(a && b)  
if(a || b)

は、Javaがチェックする b もし a が偽の場合、そして a は、2番目のケースで真になるのでしょうか?

どのように解決するのですか?

いいえ、評価されません。そして、これはとても便利なことです。例えば、Stringがnullやemptyでないかどうかをテストする必要がある場合、次のように書くことができます。

if (str != null && !str.isEmpty()) {
  doSomethingWith(str.charAt(0));
}

または、その逆

if (str == null || str.isEmpty()) {
  complainAboutUnusableString();
} else {
  doSomethingWith(str.charAt(0));
}

もしJavaに「短絡回路」がなかったら、上記のコードの行でたくさんのNullPointerExceptionを受け取っていたことでしょう。