2012-07-09 98 views
1

我在嘗試複製散列表然後添加一些值時遇到問題。我有兩個不同的哈希表(用於調試目的)。我聲明的第一個散列表並將其設置爲等於另一個散列表。散列表副本導致空指針

Hashtable model1 = model; 

第二個散列表是用原始散列表聲明和初始化的,它應該將每個單元和關鍵字複製到新的散列表中。

Hashtable model2 = new Hashtable(model); 

但是,當我試圖讓一個元素從MODEL2回來,它總是拋出一個NullPointerException。然而,第一個實例(model1)不會拋出任何東西(儘管它不會給我我想要的結果,因爲它會添加對模型實例的引用)。任何幫助或建議將欣賞! :)

+1

請張貼引發NPE的代碼。 – 2012-07-09 03:38:44

+2

_「當我試圖從model2獲取元素時,它總是拋出一個NullPointerException異常」_「。請顯示您用於檢索值的代碼。 – 2012-07-09 03:39:12

+0

_boolean result =(Boolean)model.get(this.uniqueSymbol); _這是給我例外的語句,它也發生在另一個函數中。 – 2012-07-09 03:44:02

回答

1
boolean result = (Boolean)model.get(this.uniqueSymbol); 

如果您檢索值爲空,你得到一個空Boolean對象,但那麼JVM試圖把它自動拆箱到原始,但由於該值爲空,你會得到一個空指針異常。您應該驗證您試圖獲取的值實際上不爲null。嘗試沒有自動拆箱行爲,看看會發生什麼。

Boolean result = (Boolean)model.get(this.uniqueSymbol); 

JavaDoc for Hashtable:如果此映射包含該鍵的映射返回指定鍵被映射,或值。

+0

無論如何,我都可以重新佈置它的原始形式。我試過了Boolean.booleanValue(),但它拋出了相同的異常。 – 2012-07-09 03:55:06

+0

那麼如果你真的得到一個null,那麼就沒有辦法直接將它轉換爲一個原語,因爲在Java中null不一定是真或假。我猜你可以這樣做: 布爾b =(布爾)model.get(this.uniqueSymbol); 布爾結果= b == null? false:b.booleanValue(); – jjathman 2012-07-09 03:56:15