HashMap
不会为键和值采用基本类型,但我们仍然可以轻松地存储基本类型的值,如下所示:
HashMap h = new HashMap();
h.put(1,1);
怎么可能?
答案 0 :(得分:2)
当您将基元存储在HashMap
(或任何Collection
)中时,它们会被装入其引用类型中。 int
框为Integer
。
答案 1 :(得分:2)
这是因为1
自动装箱到Integer
(实际上与此相同:Integer.valueOf(1)
)。详细了解autoboxing here。
int
已装箱至Integer
long
已装箱至Long
double
已装箱至Double
float
已装箱至Float
boolean
已装箱至Boolean
在您的示例中,您使用的是Map
的原始类型。您声明的Map
- 对象最有可能被声明为:
Map<Integer, Integer> h = new HashMap<>();
h.put(1, 1);
在此SO-question中详细了解原始类型。
答案 2 :(得分:1)
基元由编译器自动装箱并作为包装器对象插入。因此,在您的情况下,它将自动装箱为Integer对象。有关详细信息,请参阅this。每个基本类型都有相应的包装器对象,其中一些包含:
primitive - Object
byte - Byte
char - Character
short - Short
int - Integer
long - Long
double - Double
float - Float
boolean - Boolean
答案 3 :(得分:0)
正如任何Java程序员所知,你不能放一个int(或其他原语 价值)成一个集合。
集合只能保存对象引用, 所以你必须将原始值包装到适当的包装类中 (在int的情况下是Integer)。
当您取出物体时 收集,你得到你输入的整数;如果你需要一个 int,您必须使用intValue方法取消装箱整数。所有这些 拳击和取消装箱是一种痛苦,并使你的代码变得混乱。
在 自动装箱和拆箱功能可自动完成此过程,从而消除了 痛苦和杂乱。