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
备注
当使用 Object
、Number
或 [=14= 对集合进行参数化时,Java 会自动将原语 double
装箱为 Double
].
但是,如果您的地图值使用不兼容的类型进行参数化,例如Integer
。
我有一张简单的地图:
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
备注
当使用Object
、Number
或 [=14= 对集合进行参数化时,Java 会自动将原语 double
装箱为 Double
].
但是,如果您的地图值使用不兼容的类型进行参数化,例如Integer
。