循环空指针异常

时间:2013-07-30 13:04:21

标签: java exception-handling nullpointerexception while-loop

如果 newWord null ,它不应该进入循环,但为什么它会进入循环并提供 java.lang.NullPointerException < /强>

newWord = "abcd";
while(!newWord.equals(null))
{
    try {
    newWord = br.readLine();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    }
    catch(NullPointerException p)
    {

    }
}

它给出了堆栈跟踪,但我没有在任何地方使用 printStackTrace()

8 个答案:

答案 0 :(得分:8)

newWord本身为空。当对象为null时,您无法调用其上的任何方法,因为未定义对象。由于.equals是一种方法,因此您将获得异常。试试这个:

newWord != null

这是调试器很容易解决的问题。学习使用调试器是令人沮丧的(正如学习任何新工具一样),但它可以为您节省数小时的痛苦。这是你的朋友。

答案 1 :(得分:3)

如何简单地

    while(newWord!=null)

想想看,如果newWorld为null,当你调用方法时会发生什么?

答案 2 :(得分:1)

它不会进入循环,因为

newWOrd.equals(null)

如果为空则抛出NPE

你的意思是

newWord != null

如果您使用调试器,或者查看堆栈跟踪中触发它的行,您可以看到此行为。

答案 3 :(得分:0)

!newWord.equals(null)

是你的问题。

使用newWord != null

答案 4 :(得分:0)

您只检查“newWord”是否为空,如果“br”还有任何内容从中读取,则永远不会。

类似的东西:

而(br.hasNext());

答案 5 :(得分:0)

你得到的NullPointerException是因为while(!newWord.equals(null))并且没有被捕获,因为在此代码之后使用了try,catch。

如果要抑制此异常,请将while(!newWord.equals(null))放在try-catch块中。

答案 6 :(得分:0)

String.equal的参数不应为null,并且传递显式为null,因此是异常。使用复合表达式检查空字符串和特殊空值。

它尝试在进入循环之前评估表达式,很快就遇到表达式!newWord.equals(null),因为newWord为null,抛出异常。

答案 7 :(得分:0)

在大多数情况下避免空例外(在条件表达式中)我建议你使用Yoda条件:

if(null != value)

此外,这适用于变量和常量之间的每个条件:

if(MY_CONSTANT_STRING.equals(myVariableString))