布尔表达式中的空字符串

时间:2013-08-13 09:33:59

标签: java boolean

考虑一下

boolean askIfNotAvail = (...)
String p = locationManager.getBestProvider(c, true);
if ((p == null || p.equals("passive")) && askIfNotAvail) {
   askUserToEnableGps(false);
   return false;
}
  1. 我能绝对肯定,如果p == nullp.equals("")将永远不会被调用(调用它会给NPE)吗?我想无论'读'是什么,只要满足第一个条件,这个表达式就会跳出第一个表达式(p == null || p.equals("passive")

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

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

4 个答案:

答案 0 :(得分:2)

  1. 是的,您可以确定不会评估或表达式的第二部分,因为Java会懒惰地评估布尔表达式。
  2. 它被称为布尔表达式评估,请参阅语言规范。
  3. 阅读Java Language Specification

答案 1 :(得分:2)

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

if ("passive".equals(p) && askIfNotAvail) {
    askUserToEnableGps(false);
    return false;
}

答案 2 :(得分:1)

  1. 是的,你可以确定它是否被调用。 如果||的第一个表达式为真,则不调用第二个表达式。 如果你明确想要调用它,请使用|

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

  2. 我还不知道

  3. java language specification

答案 3 :(得分:0)

    总是调用
  1. p == null。如果p == null评估为true,则不会评估p.equals(""),因为true || anything评估为true

  2. 不知道问题是什么。

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