包装类自动装箱和拆箱原理

包装类的自动装箱和自动拆箱

包装类的自动装箱和拆箱是JDK1.5的新特性

一.首先:了解自动装箱的过程

有两种自动装箱过程

第一种 (-128~127)之内 调用相应包装类的valueOf()

例如:Integer i = 12; Integer a = 23;

这些过程由JDK 编译器自动装箱完成的 即 会自动调用 Integer.valueOf() 方法

上面实际为: Integer i = Integer.valueOf(12); Integer a = Integer.value(23);

其实在该范围之内,底层中是通过数组存的值,当在该范围内再一次定义相同大小的值,如12,JDk它会在相应的数组里找到该值是不是存在,如存在则数组里存有12,则把它的引用给该对象,所以它们的地址是相等的.

例如:Integer a = 20; Integer b = 20;

System.out.println(b==a);//true

第二种 不在(-128~127)之内 直接 new 对象

例如: Integer i = 200; Integer a = 200;

实际为: Integer i = new Integer(200); Integer a = new Integer(200);

System.out.println(i==a);//false

注意:只要他们的实际值相同(基本类型数值) ,则它们的hashCode相等

二.自动拆箱的过程

自动拆箱是指将包装类的类型直接赋值给对应的基本数据类型的变量;

例如: Integer i = 100; int a = i;

实际上底层调用了相应的xxxValue()方法: Integer i = 100; int a = i.intValue();

在包装类进行与基本数据类型比较时 ,会存在自动拆箱的操作。

Integer in = 400;
int i = 400;
// 当包装类和对应的基本类型在运算的时候会进行自动拆箱
System.out.println(in == i);//true

NaN

// NaN是唯一的一个值
// NaN与任何东西都不相等,包括自己本身
// System.out.println(Double.NaN == Double.NaN);//false
System.out.println(Double.isNaN(5.8 / 4.32));//false
System.out.println(Double.isNaN(0.0/0));//true
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值