考虑一下
boolean askIfNotAvail = (...)
String p = locationManager.getBestProvider(c, true);
if ((p == null || p.equals("passive")) && askIfNotAvail) {
askUserToEnableGps(false);
return false;
}
我能绝对肯定,如果p == null
,p.equals("")
将永远不会被调用(调用它会给NPE)吗?我想无论'读'是什么,只要满足第一个条件,这个表达式就会跳出第一个表达式(p == null || p.equals("passive")
。
听起来很愚蠢,但Java语言的哪一部分会在运行时检查此表达式?
是否有一些关于Java如何'读取'这样的布尔表达式的文档?
答案 0 :(得分:2)
答案 1 :(得分:2)
您可以通过使用以下语法来避免这些NPE:
if ("passive".equals(p) && askIfNotAvail) {
askUserToEnableGps(false);
return false;
}
答案 2 :(得分:1)
是的,你可以确定它是否被调用。
如果||
的第一个表达式为真,则不调用第二个表达式。
如果你明确想要调用它,请使用|
(与&&
表达式相同:第一个表达式为false,第二个表达式不会被执行。
&
也将执行第二个表达式)
我还不知道
答案 3 :(得分:0)
p == null
。如果p == null
评估为true
,则不会评估p.equals("")
,因为true || anything
评估为true
。
不知道问题是什么。
Java语言规范:http://docs.oracle.com/javase/specs/