简单理解包装类(包含面试题)

21 阅读2分钟

包装类

定义

在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型。

1.1 基本数据类型和对应的包装类

包装类是用来服务基本数据类型的

基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

1.2 装箱和拆箱

装箱(装包):将一个基本数据类型装起来,它就变成了包装类型

拆箱(拆包): 把一个包装类型拆开,它就变成了基本数据类型

public static void main1(String[] args) {
    int i = 5;
    Integer Ii = i;   //自动装箱
    Integer Ij =(Integer)i;    //自动装箱
    System.out.println(Ij);    //5

    int j = Ij;    //自动拆箱
    int l = (int)Ij;  //自动拆箱
}

为什么要有包装类?

1.在Java当中,基本类型并不是属于Object的类型

2.泛型并不支持基本类型

3.这是为了在后面学习的(泛型)中可以支持基本类型的使用,而对它们进行的一种打扮,每个基本类型都对应的得有一个包装类型

1.3手动装箱和拆箱

int类型为例

装箱 :Integer.valueOf()

拆箱: intValue()

public static void main(String[] args) {
    //手动

    //1.装箱 Integer.valueOf()
    int i = 32;

    //Integer Ii = i;   //自动装箱

    Integer Ii = Integer.valueOf(i);    //手动装箱1
    //Integer Ij = new Integer(24);   //手动装箱2


    //2.拆箱 intValue()

    Integer Ij = new Integer(24);   //手动装箱2
    // int j = Ij;   //自动拆箱
    int j = Ij.intValue();  //手动拆箱
}

手动装拆箱和自动装拆箱的区别?

1.作用上没有区别,都是装拆箱子;

2.代码也是同一段代码,只是简化了方法的调用。

3.自动比手动少写了一点代码,总体上减轻了代码量,减轻负担。

关于装箱很重要的知识点-范围

大家请看下列的代码告诉我输出的值是多少。

想必大家得出自己的结果之后,会思考为什么仅仅相差一位,结果就会不一样。下面就是我的解释

上述代码我们进行的是装箱操作,装箱的操作是Integer.valueOf() ,这时候我们点进去源码去看,也就是下图.

1.从图中我们能得知Integer的范围就是 -128——127

2.图中划红线的位置我们可以明显看出这是个数组

3.随后我们根据范围即可画出数组图,分别观察127和128所在的位置

4.c和d的数值已经超过了数组范围,导致他们两的地址不一样,所以我们c和d的输出结果为false