首页 > 其他 > 详细

整数包装类的装箱问题

时间:2021-06-29 13:30:08      阅读:16      评论:0      收藏:0      [点我收藏+]

整数包装类

对于Long Integer Byte Short等整数包装类而言,Java会缓存 [-128,127] 的整数。也就是说,对于两个同类型整数包装类对象的值,满足:

  • 在这个区间内,并且值相同

  • 间接或直接使用静态方法valueOf创建对象

    • 间接是指直接赋一个整数值

      Integer integer = 3;
      
    • 直接是直接调用valueOf方法

      Integer integer = Integer.valueOf(3);
      

就表示两个对象的地址空间相同。

解析

创建对象的三种方法

以Integer为例

  • 构造方法

        public Integer(int value) {
            this.value = value;
        }
    
  • 直接赋值 && valueOf方法

        public static Integer valueOf(int i) {
            if (i >= IntegerCache.low && i <= IntegerCache.high)
                return IntegerCache.cache[i + (-IntegerCache.low)];
            return new Integer(i);
        }
    

三者的区别与联系

  • 构造方法的方式一视同仁,对于任意的装箱,都是创建新的对象,不会有地址空间重复的情况

  • 直接赋值和valueOf方法相同,前者间接调用valueOf方法完成赋值。

    • 它会首先判断是否在[-127,128]区间内,若在,则返回缓存数组cache中相对应的引用;

    ? 若不在,则调用构造方法创建对象。

    • 值得一提的是,因为byte类型数据本身的赋值范围就在此区间内,所以它的构造方法和后两种是分开的。即通过后两种方法必然会在此区间内。

整数包装类的装箱问题

原文:https://www.cnblogs.com/librel/p/14949138.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!