如果 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()
答案 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))