2

このことを考慮

boolean askIfNotAvail = (...)
String p = locationManager.getBestProvider(c, true);
if ((p == null || p.equals("passive")) && askIfNotAvail) {
   askUserToEnableGps(false);
   return false;
}
  1. p == nullifが呼び出されないことを絶対に確信できますかp.equals("")(それを呼び出すと NPE が発生します)。(p == null || p.equals("passive")この式を「読み取る」ものは、​​最初の条件が満たされるとすぐに最初の式から飛び出すと思います。

  2. ばかげているように聞こえますが、Java 言語のどの部分が実行時にこの式をチェックするのでしょうか?

  3. Java がブール式をこのように「読み取る」方法に関するドキュメントはありますか?

4

4 に答える 4

2

次の構文を使用することで、これらの NPE を回避できます。

if ("passive".equals(p) && askIfNotAvail) {
    askUserToEnableGps(false);
    return false;
}
于 2013-08-13T09:42:20.577 に答える
2
  1. はい、Java はブール式を遅延して評価するため、 or 式の 2 番目の部分が評価されないことを確認できます。
  2. これはブール式評価と呼ばれます。言語仕様を参照してください。
  3. Java 言語仕様を読んでください。
于 2013-08-13T09:38:57.730 に答える
0
  1. p == null常に呼び出されます。p == nullが に評価される場合true、は に評価されるため、評価さp.equals("")れません。true || anythingtrue

  2. 質問が何について尋ねているのかわかりません。

  3. Java 言語仕様: http://docs.oracle.com/javase/specs/

于 2013-08-13T09:45:55.877 に答える