包装类--装箱拆箱

包装类--装箱拆箱,第1张

包装类--装箱拆箱 包装类–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 。

二:装箱拆箱源码
  • 装箱

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

  • 拆箱

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

代码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及以后,支持自动装箱和拆箱

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5683585.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存