2016-05-01 76 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