int和Integer

int 和Integer的区别

  • int
    整形数字,Java的8个原始数据类型(boolean、byte、short、char、int、float、double、long)之一,虽然Java号称一切皆对象,但是原始数据类型却是例外。
  • Integer
    int 对应的包装类,有一个int类型的字段存储数据,并提供了一些基本操作(如数学运算、int和字符串之间转换等)。
    在Java 5中引入了自动拆箱与自动装箱功能,Java可根据上下文,自动进行转换,极大地简化了相关编程。
    关于Integer的缓存:
    在Java 5 中新增了静态工厂方法 valueOf,在调用的时候会利用缓存机制来改进性能。这个值默认范围在 -128~127 之间。使用该方法后,如果两个对象的int值相同且落在缓存值范围内,那么这个两个对象就是同一个对象;当值较小且频繁使用时,推荐优先使用整型池方法(时间与空间性能俱佳)。
    一些其它包装类的缓存:
    Boolean,缓存了 true/false 对应实例,确切说,只会返回两个常量实例 Boolean.TRUE/FALSE;
    Short,同样是缓存了 -128 到 127 之间的数值。
    Byte,数值有限,所以全部都被缓存。
    Character,缓存范围’\u0000’ 到 ‘\u007F’。
一些问题
  • 自动装箱/拆箱发生在什么阶段?
    编译阶段。
  • 自动拆箱与自动装箱用到了缓存机制吗?
    自动装箱调用的 valueOf 与自动拆箱调用的 intValue 都使用了缓存机制。
  • 既然Java对象的使用已经很高效,那为什么我们还是需要原始数据类型,使用中的差异有哪些?
    对于内存的使用而言,对象的使用要占用更多的空间,从而产生很多不必要的开销。
    int是直接访问数据内存地址,而Integer需要通过引用才能找到数据内存地址。
  • 通过阅读Integer源码,分析下类或某些方法的设计要点。
    缓存默认在 -128~127之间。调用valueOf才使用缓存,new 不适用缓存。
    和String一样是final的。
    Integer 等包装类,定义了类似 SIZE 或者 BYTES 这样的常量,以避免环境的改变(如32位变为64位)造成影响。

补充

  • Integer的缓存上限值可以调节,JVM提供了参数设置:

-XX:AutoBoxCacheMax=N

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值