享元模式

介绍

享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。

Integer 类
Integer i = new Integer(10)
int i1 = 10;
System.out.println(i==i1);//true 

原因很好理解,基本类型不可以比较地址,所以Integer 转成基本类型去比较值。

Integer i1 = 10Integer i2  = 10;
System.out.println(i2==i);//true

对于这个比较判断,需要知道的几点,形如:Integer i2 = 10,会自动调用valueof方法。

if (i >= IntegerCache.low && i <= IntegerCache.high)
       return IntegerCache.cache[i + (-IntegerCache.low)];
       return new Integer(i);

这种申明-128 到127的数会存放到缓冲池,他们就会共用一个内存地址。如果超过的话,就会返回一个Integer 普通对象。

            Integer i2  = 200;
        Integer i3  = 200;
        System.out.println(i2==i3);//false

验证上面,这回产生两个不同的对象。

Integer i = new Integer(10);
Integer i2  = 10;
System.out.println(i2==i);//false

new分配的是在堆空间上,就会和刚才缓冲池的一样了。

String

其实享元模式,在String也有应用,就是字符串常量区。根据上面讲。

           String s = "9999";
       String s2 = new String("9999");
       String s1="9999";
       System.out.println(s2==s1);//false 一个是在堆空间,一个是在字符串常量区
       System.out.println(s==s1);//true 两种在字符串常量区,指向同一个对象。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值