【问题标题】:Hashtable copy leads to null pointer哈希表复制导致空指针
【发布时间】:2012-07-08 11:34:58
【问题描述】:

我在尝试复制哈希表然后添加一些值时遇到问题。我有两个不同的哈希表(用于调试目的)。我声明的第一个哈希表并将其设置为等于另一个哈希表。

Hashtable model1 = model;

第二个哈希表使用原始哈希表声明和初始化,原始哈希表应该将每个元素和键复制到新的哈希表中。

Hashtable model2 = new Hashtable(model);

但是,当我尝试从 model2 取回一个元素时,它总是会抛出 NullPointerException。但是,第一个实例(model1)没有抛出任何东西(尽管它没有给我想要的结果,因为它添加了对模型实例的引用)。任何帮助或建议将不胜感激! :)

【问题讨论】:

  • 请贴出抛出 NPE 的代码。
  • “当我尝试从model2取回一个元素时,它总是抛出一个NullPointerException”。请显示您用于检索值的代码。
  • boolean result = (Boolean)model.get(this.uniqueSymbol); 这是给我异常的语句,它也发生在另一个函数中。

标签: java collections nullpointerexception hashtable


【解决方案1】:
boolean result = (Boolean)model.get(this.uniqueSymbol);

如果您检索的值为 null,则您将获得一个 null Boolean 对象,但随后 JVM 尝试将其自动拆箱为原语,但由于该值为 null,您将收到一个空指针异常。您应该验证您尝试获取的值实际上不为空。在没有自动拆箱行为的情况下尝试一下,看看会发生什么。

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

来自JavaDoc for Hashtable:返回指定键映射到的值,如果此映射不包含该键的映射,则返回 null

【讨论】:

  • 无论如何我可以将布尔值重铸为原始形式。我尝试了 Boolean.booleanValue() 但它抛出了同样的异常。
  • 好吧,如果你真的得到一个空值,那么就没有办法直接将它变成一个原语,因为空值在 Java 中不一定是真或假。我猜你可以这样做: Boolean b = (Boolean)model.get(this.uniqueSymbol);布尔结果 = b == null ? false : b.booleanValue();
猜你喜欢
  • 1970-01-01
  • 2014-05-22
  • 2011-04-09
  • 2013-12-31
  • 2017-08-27
  • 2015-07-15
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多