Java通用对象空指针检查引发空指针异常

Java通用对象空指针检查引发空指针异常,java,generics,nullpointerexception,tostring,Java,Generics,Nullpointerexception,Tostring,我试图寻找一个类似的问题,但没有结果。如果我将运算符从“!=”更改为“=”,它将打印“{}”。另外,如果我只是打印出我正在测试的变量(current.myData),它引用的整数会按预期打印出来。但是,每次我测试“current.myData!=null”时,它都会抛出一个null指针异常并退出。非常感谢您的帮助 public class LinkedQueue<E> implements QueueADT<E> { @Override public String to

我试图寻找一个类似的问题,但没有结果。如果我将运算符从“!=”更改为“=”,它将打印“{}”。另外,如果我只是打印出我正在测试的变量(current.myData),它引用的整数会按预期打印出来。但是,每次我测试“current.myData!=null”时,它都会抛出一个null指针异常并退出。非常感谢您的帮助

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;
}
公共类LinkedQueue实现QueueADT{
@凌驾
公共字符串toString(){
...
字符串exitVal=null;
最终StringBuffer sb=新StringBuffer();
if(myFront.myData==null){
exitVal=“{}”;
}否则{
节点当前=myFront.myNext;
某人附加('{');
sb.append(myFront.myData);
while(current.myData!=null){
某人加上(“,”);
sb.append(String.valueOf(current.myData));
current=current.myNext;
}
某人附加('}');
exitVal=sb.toString();
}
返回exitVal;
}

在循环体中,
current=current.myNext;
没有测试
myNext
是否为
null
,因此第一次(或后续)循环迭代
current
必须为
null
。您可以更改

while (current.myData != null) {
差不多

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

这不是简单地意味着
current
null
?您的修复程序工作得很好。谢谢!不过我不确定我是否完全理解它。这是否意味着Java在检查“current.myData”是否为null之前检查“current”是否为null?因此,我的测试击中了实际节点(或者没有)在节点中的字段之前?