int 和 Integer的区别

分析

int

int 是java的基本数据类型。

Integer

Integer 继承了Object类,是对象类型,是 int 的包装类。

int 与 Integer 的区别

  1. 值的存储
    int 存储在栈中
    Integer 对象的引用存储在栈空间中,对象的数据存储在堆空间中。
  2. 初始化
    int 初始化值为0。
    Integer 初始化值为null。
  3. 传参
    int 是值传递,栈中的数据不可变。
    Integer 对象是引用传递,引用不可变,但是引用指向的堆空间地址中的值是可以改变的。
  4. 泛型支持
    泛型不支持int,但是支持Integer。
  5. 运算
    int 可以直接做运算,是类的特性。
    Integer 的对象可以调用该类的方法,但是在拆箱之前不能进行运算,需要转化为基本类型int。

相同值下的 int 和 Integer 的比较结果

  1. 两个通过new生成的变量,结果为false。
  2. int 和 Integer 的值比较,若两者的值相等,则为true。
    (注意:在比较时,Integer会自动拆箱为int类型,然后再做比较。)
  3. new 生成的Integer变量 和 非new 生成的Integer变量比较,,结果为false。
    (注意:new 生成的Integer变量的值在堆空间中,非new 生成的Integer变量的值在在常量池中。)
    (注意:非new生成的Integer变量,会先判断常量池中是否有该对象,若有则共享,若无则在常量池中放入该对象;也叫享元模式,后面再说。)
  4. 两个非new 生成的Integer对象比较,则结果为true。
    (注意:此处需要一个前提:值的范围在 -128 ~ 127 之间。
    涉及到java对 int 与 Integer 的自动装箱和拆箱的一种模式:享元模式—flyweight,为了加强对简单数字的重复利用。
    在赋值时,其实是执行了Integer的valueOf()方法。
    当值在 -128 ~ 127之间时,java会进行自动装箱,然后会对值进行缓存,如果下次再有相同的值,会直接在缓存中取出使用。缓存是通过Integer的内部类IntegerCache来完成的。
    当值超出此范围,会在堆中new出一个对象来存储。
    PS:自动装箱与拆箱是在JDK1.5中出现的。
  5. 内部类IntegerCache
    通过此类可以缓存简单数字。
    缓存的数大小可以由 -XX:AutoBoxCacheMax = 控制。
    jvm初始化时,java.lang.Integer.IntegerCache.high属性可以设置并保存在私有系统属性中。
    规定了low属性的值:-128
  • 12
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值