Java 装箱和拆箱

一、装箱机制缓存

  基础类型引用到其包装类型,这样就能够调用其各类方法。code

  例如,咱们声明:对象

  Integer a = 1;编译器

  其在编译过程当中会自动解释成:源码

  Integer a = Integer.valueOf(1);编译

  这就是自动装箱的过程。class

二、拆箱机制基础

  与装箱相反,将引用类型简化为基础类型。语法

  例如咱们在进行比较时:引用

  Integer a = 1;

  System.out.println(a == 1);  // 2

  2在编译中会将Integer类型的a自动拆箱,解释为:

  int a = new Integer(1);

  而后再去与1进行对比。

注意:自动装箱和拆箱是由编译器来完成的,编译器会在编译期根据语法决定是否进行装箱和拆箱动做。

三、缓存机制

    1. Integer i1 = 100;

    2. Integer i2 = 100;

    3. Integer i3 = 200;

    4. Integer i4 = 200;

    5. System.out.println(i1 == i2);    

    6. System.out.println(i3 == i4); 

  最后的运行结果 分别是  true 和  false!

  既然 Integer声明时会被自动装箱为Integer.valueOf(int i)的方法,咱们能够看看Integer源码。

  发现当 i 的值在-128到127之间时会直接返回内部缓存池中已经存在对象的引用,而这个范围就叫作自动装箱池,而当参数是其范围以外时则会新建对象并返回对象,这样就能解释以上的结果了。

  一样的,能够看看其它的封装类会是什么状况?

  对应的自动装箱池大小以下:

  Byte,Short,Long对应的是-128~127

  Character对应的是0~127

  Float和Double没有自动装箱池

相关文章
相关标签/搜索