包装类--装箱拆箱

包装类–Integer和int比较的大坑
一:前提引入:
Integer i1 = 40;
Integer i2 = new Integer(40);
System.out.println(i1==i2);//false

Integer i1=40 这一行代码会发生装箱,也就是说这行代码等价于 Integer i1=Integer.valueOf(40) 。因此,i1 直接使用的是常量池中的对象。而Integer i1 = new Integer(40) 会直接创建新的对象。因此,输出 false 。

二:装箱拆箱源码
  • 装箱

image-20211102173132631

  • Integer b=a; 这段代码等同于Integer b=Integer.valueOf ( a )

  • 拆箱

image-20211102173238959

  • int a=b,这段代码等价于:int a=b.intValue()
三;相关题目

image-20211102173341911

代码1好理解,a和b指向的是堆的两块不同的区域,所以他们是不相等的,输出fasle。

代码2也好理解,他是一个自动装箱的过程,会调用Integer.valueOf ( int i ) 方法,所以,他们c,d都不会创建新的对象,而是直接从常量池中拿。所以他们都是一样的,输出true.

代码3也是哥自动装箱的过程,调用Integer.valueOf ( int i )方法,判断不在缓存中拿,所以会在堆上创建新的对象,比较的时候当然是fasle.

代码4,int g=59,首先明白这个59是存储在哪里的?由于他是基本的数据类型,所以它是存在栈中的,Integer h=new Integer(59);这个会在堆中就创建一个对象存储的是59,但是由于代码执行到g==h的时候,这时一个是基本类型一个包装类型,他们相比较,h会发生自动拆箱的过程。即调用intValue()方法返回一个int类型,基本类型就是只比较数值,所以输出true。

四:总结

所有整型包装类对象之间值的比较,全部使用 equals() 方法比较

五:Plus
  • 将基本数据类型转换为包装类称为装箱,将包装类转换为基本数据类型称为拆箱
  • 在JDK1.5以前,需要手动装箱和拆箱,在JDK1.5及以后,支持自动装箱和拆箱
    基本数据类型称为拆箱**
  • 在JDK1.5以前,需要手动装箱和拆箱,在JDK1.5及以后,支持自动装箱和拆箱
  • img
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值