Java中包装类

①基本数据类型(8种)

  • 数值型

    • 整数型 byte、short、int 、long

    byte占一个字节8个bits,默认值为0;short占两个字节16bits,默认值也为0;

    int占用4个字节32bits,默认值为0;long占8个字节64bits,默认值是0L

    • 浮点数 float、double

    float单精度 4个字节32bits,默认值是0.0f

    double 双精度 8个字节64bits 默认值是0.0d

  • 字符型 char

    16bits

  • 布尔型 boolean

    只有false或者true,默认值为false

    不明确指定整数型默认为int,带小数默认为double

②基本数据类型对应的包装类

为什么会出现?

Java的思想就是一切皆是对象,而基本数据类型不是一个对象,所以Java通过包装类实现对基本基本数据类型的引用。

有些地方只能用对象比如l集合中不能使用基本数据类型,这里就可以使用包装类

包装类分类:

Integer和int、Boolean和boolean、Byte与byte、Character与char、Double与double、Number抽象类

(注意:这里String不是包装类,string也不是基本数据类型)

包装类比较:

包装类(以Integer为例)基本数据类型(以int为例)
一个对象只是一个数据类型
必须实例化才能使用直接定义就行
表示一个Integer对象的引用
默认值为null默认值为0
Integer中存在很多操作方法(Integer.toString())只能进行简单的加减乘除操作

Auto-Boxing/UnBoxing

自动装箱和自动拆箱

  • 装箱:基本数据类型封装成包装类(int------>Integer

Interger i=10; --------会自动装箱-----> Interger i=Interger.valueOf(10)

  • 拆箱:包装类变成基本数据类型(Integer----->int

当Integer与int需要比较的时候,Integer就会自动拆箱成int进行基本数据类型的比较

包装类和基本数据类型之间的==

==比较的是对象地址是否相同,equals是比较引用对象的内容是否相同

public class TestInteger {
    public static void main(String[] args) {
        int i = 128;
        Integer i2 = 128;
        Integer i3 = new Integer(128);
        System.out.println(i == i2); //Integer会自动拆箱为int,所以为true
        System.out.println(i == i3); //true,理由同上
        Integer i4 = 127;//编译时被翻译成:Integer i4 = Integer.valueOf(127);
        Integer i5 = 127;
        System.out.println(i4 == i5);//true
        Integer i6 = 128;
        Integer i7 = 128;
        System.out.println(i6 == i7);//false
        Integer i8 = new Integer(127);
        System.out.println(i5 == i8); //false
        Integer i9 = new Integer(128);
        Integer i10 = new Integer(123);
        System.out.println(i9 == i10);  //false
    }
}
  • new的Integer对象

 Integer i9 = new Integer(123);
 Integer i10 = new Integer(123);
 System.out.println(i9 == i10);  //false

通过new出来的对象地址永远都不是一个,所以这里输出为false

 Integer i5 = 127;
 Integer i8 = new Integer(127);
 System.out.println(i5 == i8); //false
  • Integer与int比较

int i = 128;
Integer i2 = 128;
Integer i3 = new Integer(128);
System.out.println(i == i2); //Integer会自动拆箱为int,所以为true
System.out.println(i == i3); //true,理由同上

Integer与int的比较就是比较值是否相等,Integer会自动拆箱成int

  • Integer之间的比较

 Integer i4 = 127;//编译时被翻译成:Integer i4 = Integer.valueOf(127);
 Integer i5 = 127;
 System.out.println(i4 == i5);//true
 Integer i6 = 128;
 Integer i7 = 128;
 System.out.println(i6 == i7);//false

非new出来的Integer对象,在-128----127之间,值相等就是true

不在这个区间内会创建两个对象,所以为false

这里为什么会创建两个对象主要是因为valueOf()函数,Integer i4 = Integer.valueOf(127),而valueOf()函数会对-128到127之间的数进行缓存,当i5为127时,不会创建一个新的对象而是直接从缓存中取

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值