int和Integer(自动)拆装箱,为什么要用Integer

本文介绍了Java从1.5版本引入的自动拆装箱特性,详细解析了int到Integer的转换过程,包括自动装箱、拆箱的示例。讨论了Integer对象在-128到127之间的享元模式实现,以及为什么在这个范围内对象引用相等。此外,还阐述了为什么在Java中需要Integer而不是仅使用int,强调了面向对象的优势,如封装和方法如parseInt(),以及在使用如ArrayList等集合时的需求。

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

1.int和Integer(自动)拆装箱

jdk1.5之后:

自动装箱:自动装箱简单来说就是将数据类型封装成对象类型。
Integer a1 = 1024;

装箱:
Integer a2 = new Integer(1024);

自动拆箱: 将对象类型转化成基本数据类型。
int b1 = a1;

拆箱:
int b2 = a1.intValue();

另:
a1 == a1; -》 false a1和a2是不同对象的引用
a1 == b1 && a1 ==b2 -》true 自动拆箱后比较的是值

Integer a3 = 99; Integer b3 = 99;
a3 == b3 -》true
享元模式: 在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象。只要在-128到127之间,那么他们指的就是同一个,即使==比较的是两者的引用,两者也是相同的,因为-128到127这些数字是使用频率比较高的,就产生了一个整型常量池,这些数字会存放在这里,有相同的数字则不会再次创建。

补充:8种基本类型的包装类和常量池
java基本类型的包装类的大部分都实现了常量池技术,即Byte,Short,Integer,Long,Character,Boolean;这物种包装类默认创建了数值[-128,127]的相应的缓存数据,但是超出此范围仍然会去创建新的对象。两种浮点数类型的包装类Float,Double并没有实现常量池技术。

2.已经有int了,为什么还要Integer

int是基本数据类型Integer是int的一个包装类(wrapper),他是类不是基本数据类型,他的内部其实包含一个int型的数据那为什么要用Integer呢,主要是因为面向对象的思想,因为Java语言是面向对象的,这也是它只所以流行的原因之一,对象封装有很多好处,可以把属性也就是数据跟处理这些数据的方法结合在一起,比如Integer就有parseInt()等方法来专门处理int型相关的数据,另一个非常重要的原因就是在Java中绝大部分方法或类都是用来处理类类型对象的,如ArrayList集合类就只能以类作为他的存储对象,而这时如果想把一个int型的数据存入list是不可能的,必须把它包装成类,也就是Integer才能被List所接受。所以Integer的存在是很必要的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值