即使字符串被初始化,Android-string.equals(null)也会返回null指针

即使字符串被初始化,Android-string.equals(null)也会返回null指针,android,string,nullpointerexception,Android,String,Nullpointerexception,我在我的应用程序中执行这个数据库操作,在这里我提取某个列值来检查它是否存在。我在执行查询并将值分配给字符串时没有问题,我甚至可以在日志中输出该值。当我试图检查我的字符串是否等于null时,我的问题就出现了,讽刺的是,我得到了一个null指针 以下是我的功能: public boolean isDone(String id){ boolean isDone = false; String timeOut = new String(); timeOut = "A";

我在我的应用程序中执行这个数据库操作,在这里我提取某个列值来检查它是否存在。我在执行查询并将值分配给字符串时没有问题,我甚至可以在日志中输出该值。当我试图检查我的字符串是否等于null时,我的问题就出现了,讽刺的是,我得到了一个null指针

以下是我的功能:

public boolean isDone(String id){
    boolean isDone = false;
    String timeOut = new String();
    timeOut = "A";

    String query = "SELECT TimeOut FROM " + TABLE_ROUTE_TABLE + " WHERE _id = '" + id + "'";
    Cursor cursor = mDB.rawQuery(query, null);

    if(cursor.moveToFirst()){
        timeOut = cursor.getString(cursor.getColumnIndex("TimeOut"));
        Log.d("Hi", "timeOut = " + timeOut);
    }

    if(timeOut.equals(null)){
        isDone = false;
    }
    else{
        isDone = true;
    }

    return isDone;
}
我在iftimeOut.equalsnull获取NPE。我不明白为什么当我把字符串作为布尔条件的一部分,当我能够使用它并显示它的值(有时可能为空)时,我会得到一个NPE


我觉得我忽略了一些基本的东西。有什么想法吗?

如果超时变量为null,此测试将始终导致NPE,因为null实例没有方法。您应该使用==运算符进行测试,例如超时==null


但是,我不明白为什么它是空的,因为您在打印时说它有值。

如果超时变量为空,此测试将始终导致NPE,因为空实例没有方法。您应该使用==运算符进行测试,例如超时==null


但是,我不明白为什么它是空的,因为你说它在打印时有值。

问题是将equals compare 2字符串放在一起,因为其中一个是空的,你就得到了NPE

你可以通过测试来修复它

超时==null


问题是将equals compare 2字符串放在一起,因为其中一个字符串为null,所以会得到NPE

你可以通过测试来修复它

超时==null


是的。。。空实例没有任何方法


因此,您应该初始化变量timeOut==null

是的。。。空实例没有任何方法


因此,您应该初始化变量timeOut==null

空值检查应按以下方式进行:

 if(timeout == null)

因为您想知道对象是否存在,这意味着指针是否为null。字符串的内容不能为空,但指向它的指针可以为空。

空检查应按以下方式进行:

 if(timeout == null)

因为您想知道对象是否存在,这意味着指针是否为null。字符串的内容不能为null,但指向它的指针可以为null。

为什么不将字符串超时设置为null。。。。。。。。如果光标。。超时=某事;并检查iftimeOut==null{}?从技术上讲,创建一个空字符串来初始化它无论如何都会有开销,因为对象不会被使用,而是被创建的,就我所知,为什么不创建string timeOut=null。。。。。。。。如果光标。。超时=某事;并检查iftimeOut==null{}?从技术上讲,创建一个空字符串来初始化它无论如何都会有开销,因为据我所知,对象不会被使用,而是被创建的。谢谢。超时==空工作。我会接受这个答案,因为这是第一个得到的。谢谢。超时==空工作。我会接受这个答案,因为这是第一次。