自动装箱与拆箱------->引出享元模式

本文深入解析Java中的装箱与拆箱机制,包括如何将基本类型转换为对象(装箱),以及如何将对象简化回基本类型(拆箱)。重点解释了内存优化中的Integer缓存池原理,通过实例演示了装箱与拆箱的过程,并阐述了内存池的使用场景与内存优化意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


装箱:

       把基本类型 用它们相应的引用类型 包装起来,使其具有对象的性质。(基本类型 ----》 对象)

          Integer i1 = 3;

拆箱

        将引用类型的对象 简化成 值类型的数据。                                  (对象 ----》 基本类型)

        System.out.println(i1 + 4);   //7

        此时   i1 是 Integer对象,4 是基本类型,相加时,则i1 自动拆箱成int类型  + 4 =7。

------------------------------------------------------------------------------------------------------------------------------

延伸:

class  Test
{
	public static void main(String[] args) 
	{
		
 
		String s1 = new String("abc");
		String s2 = new String("abc");

		Integer i2 = new Integer(10);
		Integer i3 = new Integer(10);

		Integer i4 = 10;
		Integer i5 = 10;

		Integer i6 = 137;
		Integer i7 = 137;
		
		
		System.out.println(s1==s2);    //1、false
		System.out.println(i2==i3);    //2、false
		System.out.println(i4==i5);    //3、true
		System.out.println(i6==i7);    //4、false
	}

	
}

</span>
对于这个例子,s1==s2 i2==i3 倒好理解,这4个对象都是new的对象,==比较的是引用地址,所以肯定是不相等的。

至于i4==i5 i6==i7 为什么结果不一致呢。

当小于1字节的int类型,-128~127

Integer i4 = 10; int类型的10 装箱成Integer对象,则会将10缓存在池中,

Integer i5 = 10; 当下次再次用到10装箱成Integer对象时,就会从池中获取10封装成相同的对象。


目的:节省了内存空间。因为像这种 小于1字节的数据,会经常用到,就会存在池中,如果每用到1个数据,就去开辟一个空间。将会极大浪费内存空间。没必要 每个数据对应一个对象。这就是一个设计模式:享元模式 flyweight。

很多对象都用的是相同的数据,没必要复制重复的数据,浪费空间。

比如:26英文字母,要是没输入一个字母,都生成一个字母对象,则浪费空间。所以只需要生成26个对象。

在windows中有很多文件夹图标,也是用的同一个图标。

(享元模式):有很多小的对象,具有很多相同的属性,把它们变成一个对象,称之为内部状态。,不同的(变化的)属性,变成方法的参数,称之为外部状态。test(int x,int y) .x.y就是变化的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值