Java中Integer类的自动装箱和自动拆箱与享元模式

所谓自动装箱,就是把基本数据类型用他们对应的引用类型包装起来,使他们可以具有对象的特质。例如我们可以把int类型包装成Integer类型的,把double类型的包装成Double类型的。

所谓拆箱,就是进行与自动装箱相反的操作。

自动装箱的过程:当需要一种类型的对象时,这种基本数据类型就自动封装到与它对应的包装类中。

自动拆箱的过程:当需要一个数值时,被装箱的对象中的值就会被自动提取出来,没有必要再去调用intValue()和doubleValue()等方法。

 public static void main(String[] args) {
        Integer a = 100;
        Integer b = 100;
        Integer c = 200;
        Integer d = 200;

        //因为进行了自动拆箱,比较的是基本数据类型,因此"=="比较的是其数值,结果数true。
        //当Integer类型后面赋值范围在-128---127之间时,都会返回true,否则返回false。
        System.out.println(a == b);//true
        System.out.println(a == 100);//true

        //事实上,java为了提高效率,IntegerCache类中有一个数组缓存了值从-128到127的Integer对象。
        // 当我们调用Integer.valueOf(int i)的时候,如果i的值是>=-128且<=127时,
        // 会直接从这个缓存中返回一个对象,否则就new一个Integer对象。
        System.out.println(c == d);//false
        System.out.println(c == 200);//true
    }

java为了提高效率,IntegerCache类中有一个数组缓存了值从-128到127的Integer对象,实际上采用了享元模式,什么事享元模式呢? 享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。

享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。我们将通过创建 5 个对象来画出 20 个分布于不同位置的圆来演示这种模式。由于只有 5 种可用的颜色,所以 color 属性被用来检查现有的 Circle 对象。

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

转载于:https://my.oschina.net/u/4006362/blog/2253104

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值