HashMap只能存储对象键和值

时间:2014-12-22 11:52:24

标签: java hashmap

HashMap不会为键和值采用基本类型,但我们仍然可以轻松地存储基本类型的值,如下所示:

HashMap h = new HashMap();

h.put(1,1);

怎么可能?

4 个答案:

答案 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方法取消装箱整数。所有这些   拳击和取消装箱是一种痛苦,并使你的代码变得混乱。

     

在   自动装箱拆箱功能可自动完成此过程,从而消除了   痛苦和杂乱。

refer java docs for more details