包装类

包装类:将基本数据类型转化成对象

在构造函数的章节当中我们讲过,double的默认值是0.0,这是因为基本数据类型不是类类型,它们也没有对应的实例。

所以我们定义int或者long的时候都是直接赋值的,比如: long a = 3;

但正因为它们不是类,所以它们也没有对应的方法和变量,也就没有各种各样的功能。

更主要的一点,在一些场景当中,我们是不能使用基本数据类型只能使用对象的。比如一些容器,像是ArrayList、HashMap只能接受一个对象,再比如我们提供了一个方法,但是调用方有可能传入一个空值。如果我们使用基本数据类型,null会引发报错。

所以包装类正是为了解决这个问题而产生的。

包装类和一般的类有些不太一样,稍微有些特殊,最特殊的地方就在于他们初始化的时候,既可以使用类的形式通过new来创建实例,也可以像是它们的基本数据类型那样,直接赋值:

这两种方法都是可以的,不过IDE推荐使用第一种。

Integer a = 3; 
Integer b = new Integer(3);

//自动装箱
Integer i=100;  // 相当于Integer i= Integer.valueOf(100);基本数据类型转为对象
//自动拆箱
int b=i;        // 编译器会修改成int b=i.intValue(); 对象转为基本数据类型

包装类的缓存
缓存[【-128,127]之间的数字,实际就是系统初始时,创建了[-128,127]之间的一个缓存数组。

当调用valueOf()的时候,首先检查是否在[-128,127]之间,如果在这个范围则直接从缓存数组中拿出已经建好的对象。

如果不在这个范围,则创建新的Integer对象。


Integer in1 = -128;
Integer in2 = -128;
System.out.println(in1 == in2);//true 因为123在缓存范围内
System.out.println(in1.equals(in2));//true 因为值一样

Integer in3 = 1234;
Integer in4 = 1234;
System.out.println(in3 == in4);//false 因为1234不在缓存范围内
System.out.println(in3.equals(in4));//true 值一样
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值