Java 中将基元或对象放入对象映射之间的区别

Difference between putting primitive or object to an object map in Java

我有一张简单的地图:

Map<String, Object> myMap;

我只是想知道,这两种解决方案之间有什么区别: 首先,当我将 double 值作为 Double 对象时:

myMap.put("object", Double.valueOf(myPrimitiveDouble));

第二次,当我将 double 值作为原始类型时:

myMap.put("primitive", myPrimitiveDouble);

我觉得第一个没必要吧? 感谢您的回答!

当您将原始 double 作为值放入 Map<String, Object> 时,它将自动装箱到 Double 类型中,因为通用集合(包括地图)不会使用原语。

这叫做autoboxing

因此,Double.valueOf 调用在这种情况下确实是多余的。

例子

Map<String, Object> myMap = new HashMap<>();
double foo = 5;
myMap.put("", foo);
System.out.println(myMap.get("").getClass());

输出

class java.lang.Double

备注

当使用 ObjectNumber 或 [=14= 对集合进行参数化时,

Java 会自动将原语 double 装箱为 Double ].

但是,如果您的地图值使用不兼容的类型进行参数化,例如Integer