Java 通用对象空指针检查抛出空指针异常
Java Generic Object Null Pointer Check Throwing Null Pointer Exception
我尝试搜索类似的问题,但无济于事。如果我将运算符从“!=”更改为“==”,它会打印“{}”。此外,如果我只是打印出我正在测试的变量 (current.myData),它引用的 Integer 将按预期打印出来。但是,每次我测试 "current.myData != 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;
}
在循环体中,current = current.myNext;
没有测试 myNext
是否为 null
,因此在第一个(或后续)循环迭代中 current
必须是 null
。你可以改变
while (current.myData != null) {
类似于
while (current != null && current.myData != null) {
我尝试搜索类似的问题,但无济于事。如果我将运算符从“!=”更改为“==”,它会打印“{}”。此外,如果我只是打印出我正在测试的变量 (current.myData),它引用的 Integer 将按预期打印出来。但是,每次我测试 "current.myData != 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;
}
在循环体中,current = current.myNext;
没有测试 myNext
是否为 null
,因此在第一个(或后续)循环迭代中 current
必须是 null
。你可以改变
while (current.myData != null) {
类似于
while (current != null && current.myData != null) {