2016-05-01 3 views
1

Я попытался найти подобную проблему, но безрезультатно. Если я изменил оператор с «! =» На «==», он печатает «{}». Кроме того, если я просто распечатываю переменную, которую я тестирую (current.myData), Integer, который он ссылается, распечатывает, как ожидалось. Однако каждый раз, когда я тестирую «current.myData! = Null», он выдает исключение нулевого указателя и завершает его. Любая помощь очень ценится!Java Generic Object Null Pointer Check Throwing Null Pointer Exception

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 быть null так далее либо первый (или последующий) цикл итерации current должен быть null. Вы можете изменить

while (current.myData != null) { 

к чему-то вроде

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

Вы исправляете работу отлично. Спасибо! Хотя я не уверен, что полностью понимаю это. Означает ли это, что Java проверяет, что «current» не является нулевым, прежде чем он проверяет, является ли «current.myData» нулевым? Итак, мой тест ударил фактический узел (или его отсутствие) перед полем в узле? – audiobomber