Java 自动装箱、自动拆箱和享元模式

自动装箱、自动拆箱

// 自动装箱,例子:把一个基本数据类型装成一个Integer对象
Integer iobj = 3;
// 自动拆箱,例子:把Integer对象拆箱成基本数据类型
System.out.println(iobj + 12);

享元模式(Flyweight Pattern)

享元模式是一种软件设计模式。它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。

// 若数值在-128~127之间(一字节),则会将这些数值对象会缓存起来,使用的时候,直接使用已经存在的对象(享元模式)
Integer i1 = 10;
Integer i2 = 10;
// 输出i1、i2的内存地址
System.out.println("i1:"+System.identityHashCode(i1));
System.out.println("i2:"+System.identityHashCode(i2));

// 当数值大于127或小于-128时,则这些数值会创建新的对象,通过输出对象在内存中的地址来验证
Integer i3 = 128;
Integer i4 = 128;
System.out.println("i3:"+System.identityHashCode(i3));
System.out.println("i4:"+System.identityHashCode(i4));
Integer i5 = -129;
Integer i6 = -129;
System.out.println("i5:"+System.identityHashCode(i5));
System.out.println("i6:"+System.identityHashCode(i6));

以下是完整代码

public class AutoBox {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // 自动装箱,例子:把一个基本数据类型装成一个Integer对象
        Integer iobj = 3;
        // 自动拆箱,例子:把Integer对象拆箱成基本数据类型
        System.out.println(iobj + 12);

        // 若数值在-128~127之间(一字节),则会将这些数值对象会缓存起来,使用的时候,直接使用已经存在的对象(享元模式)
        Integer i1 = 10;
        Integer i2 = 10;
        // 输出i1、i2的内存地址
        System.out.println("i1:"+System.identityHashCode(i1));
        System.out.println("i2:"+System.identityHashCode(i2));

        // 当数值大于127或小于-128时,则这些数值会创建新的对象,通过输出对象在内存中的地址来验证
        Integer i3 = 128;
        Integer i4 = 128;
        System.out.println("i3:"+System.identityHashCode(i3));
        System.out.println("i4:"+System.identityHashCode(i4));
        Integer i5 = -129;
        Integer i6 = -129;
        System.out.println("i5:"+System.identityHashCode(i5));
        System.out.println("i6:"+System.identityHashCode(i6));
    }
}
//      运行结果
//      15
//      i1:366712642
//      i2:366712642
//      i3:1829164700
//      i4:2018699554
//      i5:1311053135
//      i6:118352462
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值