• Java 装箱和拆箱


    1、装箱机制

      基础类型引用到其包装类型,这样就可以调用其各种方法。

      例如,我们声明:

      Integer a = 1;

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

      Integer a = Integer.valueOf(1);

      这就是自动装箱的过程。

    2、拆箱机制

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

      例如我们在进行比较时:

      Integer a = 1;

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

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

      int a = new Integer(1);

      然后再去与1进行对比。

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

    3、缓存机制

      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没有自动装箱池

  • 相关阅读:
    用它,只需“拖拉拽”即可轻松创建APP和短信推送规则
    如何通过机智云接口生成设备对应的二维码
    新唐方案分享:基于NUC472开发板的物联网开发,接入机智云
    公告|苹果iOS13升级在即,机智云APP适配指南
    物联网中的数据透传
    多维数组
    pymysql库的学习
    selenium库的学习
    xpath语法和lxml库的学习
    MATLAB 机场价格数据预处理和分析
  • 原文地址:https://www.cnblogs.com/jhin-wxy/p/8569072.html
Copyright © 2020-2023  润新知