2

考虑这个

boolean askIfNotAvail = (...)
String p = locationManager.getBestProvider(c, true);
if ((p == null || p.equals("passive")) && askIfNotAvail) {
   askUserToEnableGps(false);
   return false;
}
  1. 我可以绝对确定 if p == null,p.equals("")永远不会被调用(调用它会给出 NPE)?(p == null || p.equals("passive")我想只要满足第一个条件,这个表达式就会跳出第一个表达式。

  2. 听起来很愚蠢,但是 Java 语言的哪一部分在运行时检查这个表达式?

  3. 是否有一些关于 Java 如何像这样“读取”布尔表达式的文档?

4

4 回答 4

2
  1. 是的,您可以确定 or 表达式的第二部分不会被计算,因为 Java 会延迟计算布尔表达式。
  2. 它称为布尔表达式评估,请参阅语言规范。
  3. 阅读Java 语言规范
于 2013-08-13T09:38:57.730 回答
2

因此,您可以通过使用以下语法来避免这些 NPE:

if ("passive".equals(p) && askIfNotAvail) {
    askUserToEnableGps(false);
    return false;
}
于 2013-08-13T09:42:20.577 回答
1
  1. 是的,你可以确定它是否没有被调用。如果 an 的第一个表达式||为真,则不调用第二个表达式。如果您明确想调用它,请使用|

    (与&&表达式相同:第一个表达式为假,第二个不执行。 &也将执行第二个表达式)

  2. 我还不知道

  3. java语言规范

于 2013-08-13T09:38:24.577 回答
0
  1. p == null总是被调用。如果p == null评估为truep.equals("")则不会评估,因为true || anything评估为true

  2. 不知道问题在问什么。

  3. Java 语言规范:http ://docs.oracle.com/javase/specs/

于 2013-08-13T09:45:55.877 回答