java装箱拆箱机制_深入理解java自动拆箱装箱机制

什么是自动装箱?什么是自动拆箱?

所谓的装箱就是把基本数据类型转换成包装类,拆箱就是把包装类转换成基本数据类型

public static voidmain(String[] args) {//1

Integer a=new Integer(123);

Integer b=new Integer(123);

System.out.println(a==b);//输出 false//2

Integer c=123;

Integer d=123;

System.out.println(c==d);//输出 true//3

Integer e=129;

Integer f=129;

System.out.println(e==f);//输出 false//4

int g=59;

Integer h=new Integer(59);

System.out.println(g==h);//输出 true

}

用以上代码来诠释自动拆装箱机制

a==b中==符号判断的是a和b在堆中所指向的对象是不是同一个

题目1:为false的原因是生成了两个不同的对象a,b存放于堆中,那么这个结果就一定是false。

题目2:因为123这个值介于-128到127之间,在java内存的常量池中会存放一个123的常量,然后c,d两个对象都指向常量池中的123,所以判断为true。

题目3:因为129这个值超出了-128到127这个范围了,所以引用就不向常量池中进行引用了,就会重新生成一个129的Integer对象,故而e,f两个是不同对象,所以是false。

题目4:g==h是比较g,h,g是基本数据类型,h是包装类,这个时候包装类就会自动调用intValue()方法转换为基本数据类型,从而和g就是相等的,所以为true。

Integer b=3

3是int类型,如果要把int类型赋值给Integer包装类,就需要自动装箱,相当于Integer b=Integer.ValueOf(3).

Integer b= new Integer(3);

int a=b;

b是包装类,a=b是把b赋值给a,那么b这个包装类需要自动拆箱,相当于int a = b.intValue();

注意:除double 和float 两种类型以外,其他基本类型入Integer值 在 -128 ~ 127之间时不会新建一个Integer 对象而是从缓存中获取。所以在做 == 判断时 要注意值的大小,如果超过范围,则两个值 即使一样但  == 比较的结果还是false。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值