自动装箱与拆箱功能

自动装箱与拆箱功能是指将基本数据类型变量封装在Wrapper类对象中或将Wrapper类对象中的值赋给基本数据类型变量的行为。

装箱(Boxing)

int i = 10;
Integer integer = i;

拆箱(Unboxing)

Integer fooInteger = 10;
int fooPrimitive = fooInteger;

自动装箱与拆箱功能是所谓的编译程序蜜糖(compilerSugar),在使用的过程中容易产生一些不易察觉的错误。

Integer i = null;
int j = i;

事实上编译器将上述代码转换为:

Integer i = null;
int j = i.intValue();

在调用 intValue() 时将会出现空指针错误。此外,对于Wrapper对象不应该使用‘==’来判断相等,应使用equals方法,因为在自动装箱后,对于-128到127之间的值,会将他们存放在内存中重用。

Integer data1 = 100;
Integer data2 = 100;
if(data1 == data2)
    System.out.println("data1 == data2");
else
    System.out.println("data1 != data2");

上述代码将输出“data1 != data2”,因为100将存放在内存中重用,data1与data2指向的事同一块内存,data1 == data2为真。

Integer data1 = 200;
Integer data2 = 200;
if(data1 == data2)
    System.out.println("data1 == data2");
else
    System.out.println("data1 != data2");

然而上述代码将输出“data1 != data2”,因为两个200在内存中分别存储于不同的区域,data1 == data2为假。

当使用equals方法时,比较的是Wrapper类对象的值

Integer data1 = 200;
Integer data2 = 200;
if (i1.equals(i2))
    System.out.println("data1 == data2");
else
    System.out.println("data1 != data2");

上述代码输出结果为“data1 == data2”。













最后祝你身体健康,再见。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值