为什么在Android上没有满足IF条件

时间:2015-02-24 16:05:19

标签: java android if-statement android-studio

我只想知道为什么编译器允许在第一个条件下正常继续程序:

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??

1 个答案:

答案 0 :(得分:0)

它不应该继续,它应该抛出NullPointerException,你可以拦截catch块。

当你尝试

if (!spnOptionSelectedTypes.equals(null))

它应抛出此异常,因为spnOptionSelectedTypes为空,因此它不是String且没有任何equals()方法。

修改

它允许第一个if通过,因为它有2个测试

if (A OR B) {

如果Atrue,则不会测试B条件,因为OR运算符只需要一个条件才能继续。

编辑2:

使用:

if(A AND B){

如果A为真,则B也将进行测试,如果NullPointerException为空,则会抛出spnOptionSelectedCities

明确答案:

Java中的空测试

if (x != null && y != null) {
    x.doSomething();
    y.doSomethingElse();
}