2016-05-01 109 views
1

我试图寻找类似的问题,无济于事。如果我将操作符从“!=”更改为“==”,则会打印“{}”。另外,如果我只是打印出我正在测试的变量(current.myData),那么它引用的Integer会按预期打印出来。但是,每次我测试“current.myData!= null”时,它都会抛出一个空指针异常并退出。任何帮助是极大的赞赏!Java通用对象空指针检查抛出空指针异常

public class LinkedQueue<E> implements QueueADT<E> { 

@Override 
public String toString() { 
... 
    String exitVal = null; 
    final StringBuffer sb = new StringBuffer(); 
    if (myFront.myData == null) { 
     exitVal = "{ }"; 
    } else { 
     Node<E> current = myFront.myNext; 
     sb.append('{'); 
     sb.append(myFront.myData); 
     while (current.myData != null) { 
      sb.append(", "); 
      sb.append(String.valueOf(current.myData)); 
      current = current.myNext; 
     } 
     sb.append('}'); 
     exitVal = sb.toString(); 
    } 
    return exitVal; 
} 
+3

难道不是仅仅意味着'current'是'null'? – MikeCAT

回答

1

在循环体,current = current.myNext;没有测试为myNext等的第一(或随后的)循环迭代current必须nullnull。你可以改变

while (current.myData != null) { 

喜欢的东西

while (current != null && current.myData != null) { 
+0

你正在修复工作完美。谢谢!不过,我不确定我是否完全理解它。这是否意味着Java在检查'current.myData'是否为空之前检查'current'是否为空?那么,我的测试是否在节点中的字段之前击中了实际的节点(或缺少节点)? – audiobomber