Java Int和Integer有什么区别?

Java中int与Integer的区别
本文介绍了Java中int与Integer的基本概念及区别,探讨了Integer的值缓存机制及其带来的性能提升,同时讨论了原始数据类型与Java泛型的配合使用问题。

Int

int是我们常说的整型数字,是Java的8个原始数据类型(Primitive Type:boolean、byte、short、char、int、float、double、long)之一。Java语言虽然号称一切都是对象,但原始数据是例外。

 

Integer

Integer是int对应的包装类,它有一个int类型的字段存储数据,并且提供了基本操作,比如数学运算,int和字符串之间转换等。在Java5中引入了自动装箱和自动拆箱功能,Java可以根据上下文,自动进行转换,极大的简化了相关编程。

 

关于Integer的值缓存

这涉及Java5中的另一个改进。构建Integer对象的传统方式是直接调用构造器,直接new一个对象。但是根据实践我们发现大部分数据操作都是集中在有限的,较小的数值范围,因而在Java5中新增了静态工厂方法value of,在调用它的时候会利用一个缓存机制,带来了明显的性能改进。按照Javadoc,这个缓存默认值是-128到127。

 

 补充1

原始数据类型和Java泛型并不能配合使用,也就是指Primitive Types和Generic不能混用,于是Java就设计了auto-boxing/unboxing机制,实际上就是primitive value与object之间的隐形转换机制,否则要是没哟这个机制,开发者就必须每次手动显式转换,这多麻烦呀。但是primitive value与object各自有各自的优势,primitive value在内存中存的是值,,所以找到primitive value的内存位置,就可以获得值;不像object存的是reference,找到object的内存位置,还要根据reference找下一个内存空间,要产生更多的IO,所以计算性能比primitive value 差,但是object具备generic的能力,,更抽象,解决业务问题编程效率高。于是Jvav设计者的初衷是这样的:如果开发者要计算,就使用primitive value;如果开发者要处理业务问题,应该使用object,采用Generic机制。反正Java有auto-boxing/unboxing机制,对开发者来讲也不需要注意什么。为了弥补object计算能力的不足,还设计了static valueof()方法提供缓存机制,算是一个弥补。

转载于:https://www.cnblogs.com/baxianhua/p/9189727.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值