Java 返回值对象的ClassCastException getOrDefault

Java 返回值对象的ClassCastException getOrDefault,java,hashmap,concurrenthashmap,Java,Hashmap,Concurrenthashmap,我有一个类型为ConcurrentMap的映射,我想对其使用getOrDefault。 现在,如果键存在,则返回值被类型转换为BigDecimal。 当我使用下面的代码时,我得到类强制转换异常 final BigDecimal value= (BigDecimal) map.getOrDefault("key", 0); 我试着使用(Object)0,但考虑到Java中的所有东西都是对象,这毫无意义。若getOrDefault返回对象,那个么为什么它在将0强制转换为Bigd

我有一个类型为
ConcurrentMap
的映射,我想对其使用
getOrDefault
。 现在,如果键存在,则返回值被类型转换为
BigDecimal
。 当我使用下面的代码时,我得到类强制转换异常

final BigDecimal value= (BigDecimal) map.getOrDefault("key", 0);
我试着使用(Object)0,但考虑到Java中的所有东西都是对象,这毫无意义。若
getOrDefault
返回对象,那个么为什么它在将0强制转换为Bigdecimal时引发异常? 我用了下面的方法,效果很好

final BigDecimal value= (BigDecimal) map.getOrDefault("key", BigDecimal.ZERO);
无法强制转换0的原因是什么?

您无法将0(或任何
整数
)强制转换为
大十进制
。如果要转换它们,请使用
biginger.valueOf(0)


您可以在代码中为该特定常量使用
BigDecimal.ZERO

0
不是BigDecimal,不能强制转换为它。它可以转换为
整数
。这是否回答了您的问题@Eran从技术上讲,这是拳击,而不是施放。然而,奇怪的是,为什么我们不能将
int
施放到bigdecime。这并不奇怪,因为
int
bigdecime
没有相互扩展。只有当
B扩展了A
时,才可以将
A
大小写转换为
B
。您必须使用
biginger.valueOf
方法来转换(而不是强制转换)它们。。