int和Integer有什么区别

本文详细解析了Java中int与Integer的区别,包括它们的存储方式、默认值、自动装箱与拆箱机制,以及Integer的值缓存原理。同时,文章还提供了使用基本类型与包装类时的注意事项。

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

int介绍
int是8个原始数据类型之一,非对象的存在。

Integer介绍
Integer 是 int 的包装类,提供了基本操作,比如数学运算、int和字符串之间转换等当Integer被初始化后就是一个对象。

主要区别
1、Integer 是 int 的包装类。
2、Integer有一个int类型的字段存储数据,int自己存储数值。
3、Integer 默认值为null,int是基本数据类型,默认值为0;

Integer 的自动拆箱和装箱
介绍:关于Integer的值缓存,这涉及Java 5中另一个改进。构建Integer对象的传统方式是直接调用构造器,直接new一个对象。但是根据实践,我们发现大部分数据操作都是集中在有 限的、较小的数值范围,因而,在Java 5中新增了静态工厂方法valueOf,在调用它的时候会利用一个缓存机制,带来了明显的性能改进。按照Javadoc,这个值默认缓存 是-128到127之间。
理解:
自动装箱: Integer a =1; 其实 Integer a = Integer.valueOf(1);
自动拆箱: Integer a = new Integer(1); int b = a.intValue();

如int c =1;不会缓存,int 不是对象不会放入常量缓存池。
如Integer c = 1; 编译后等于 Integer c = Integer.valueOf(1); Integer 会放入常量缓存。

静态工厂方法 valueOf,其背后实现是将int值为-128 到 127 之间的Integer对象进行缓存,在调用时候直接从缓存中获取,进而提升构建对象的性能,也就是说使用该方法后,如果两个对象的int值相同且落在缓存值范围内,那么这个两个对象就是 同一个对象;当值较小且频繁使用时,推荐优先使用整型池方法
int/Integer,double/Double,boolean/Boolean均实现自动拆箱和装箱。

注意事项
[1] 基本类型均具有取值范围,在大数*大数的时候,有可能会出现越界的情况。
[2] 基本类型转换时,使用声明的方式。例:long result= 1234567890 * 24 * 365;结果值一定不会是你所期望的那个值,因为1234567890 * 24已经超过了int的范围,如果修改 为:long result= 1234567890L * 24 * 365;就正常了。
[3] 慎用基本类型处理货币存储。如采用double常会带来差距,常采用BigDecimal、整型(如果要精确表示分,可将值扩大100倍转化为整型)解决该问题。
[4] 优先使用基本类型。原则上,建议避免无意中的装箱、拆箱行为,尤其是在性能敏感的场合,
[5] 如果有线程安全的计算需要,建议考虑使用类型AtomicInteger、AtomicLong 这样的线程安全类。部分比较宽的基本数据类型,比如 foat、double,甚至不能保证更新操作的原子性, 可能出现程序读取到只更新了一半数据位的数值。

参考文献:
https: //time.geekbang.org/column/intro/82 + 评论区大流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值