我只想知道为什么编译器允许在第一个条件下正常继续程序:
public void ButtonOnClickDirectoryList(View v){
try {
if (!spnOptionSelectedDepartment.equals(null) && !spnOptionSelectedCities.equals(null)) {
if (!spnOptionSelectedTypes.equals(null)) { //code....}
spnOptionSelectedDepartment和spnOptionSelectedTypes是字符串,并在类的开头定义,如下所示:
private String spnOptionSelectedDepartment = null;
private String spnOptionSelectedCities = null;
private String spnOptionSelectedTypes = null;
所以当我按下按钮时,它会调用这个方法,这就是我现在拥有的值:
spnOptionSelectedDepartment = "9999"
spnOptionSelectedCities = null
spnOptionSelectedTypes = null
所以当我在这个条件下设置断点时,它只是继续验证其中的其余代码,如果...... 有人可以解释一下为什么会出现这种情况吗?
让我编辑问题,是的,它会在第二个if ...
上抛出nullpointer异常if (!spnOptionSelectedTypes.equals(null)) {
但是当spnOptionSelectedCities = null时,为什么它允许第一个IF??
答案 0 :(得分:0)
它不应该继续,它应该抛出NullPointerException
,你可以拦截catch
块。
当你尝试
时if (!spnOptionSelectedTypes.equals(null))
它应抛出此异常,因为spnOptionSelectedTypes
为空,因此它不是String
且没有任何equals()
方法。
修改强>
它允许第一个if
通过,因为它有2个测试
if (A OR B) {
如果A
为true
,则不会测试B
条件,因为OR
运算符只需要一个条件才能继续。
编辑2:
使用:
if(A AND B){
如果A
为真,则B
也将进行测试,如果NullPointerException
为空,则会抛出spnOptionSelectedCities
。
明确答案:
Java中的空测试
if (x != null && y != null) {
x.doSomething();
y.doSomethingElse();
}