包装类的介绍

目录

一、什么是包装类

二、基本数据类型的包装类

三、包装类和基本数据类型的区别

四、128陷阱

判断下面程序的输出结果:

输出:

原因:

1.包装类是类,它属于引用数据类型,==在引用数据类型中比较的是地址是否相同

2.在编译阶段,Integer a=100;这句话会调用Integer类下的valueOf()方法

3.valueOf()方法

标准答案:

五、自动装箱、自动拆箱

1.自动装箱

2.自动拆箱

六、巩固练习

下列输出是什么

输出

原因:

1---true

2---true

3---false

4---true

5---true

6---false

7---true


一、什么是包装类

java说万物皆对象,但是基本类型数据的数据又不太符合这一理念,因为基本数据类型不是对象,所以java将基本数据类型进行一个封装,产生了一个新的类,这个类就叫包装类。java对每一个基本数据类型都设计了一个包装类。

二、基本数据类型的包装类

基本数据类型 包装类
byte Byte
char Character
short Short
int Integer
long Long
float Float
double Double
boolean Boolean

三、包装类和基本数据类型的区别

包装类是一个类,那么它里面就有很多方法,我们就可以使用这里面的方法

比如分别用int和Integer定义变量

int a=10;
Integer a1=10;

 对a变量来说,它只能用==进行判断,但是a1就可以用equals()方法进行判断

四、128陷阱

判断下面程序的输出结果:
 

public class Test {
    public static void main(String[] args) {
        Integer a1=100;
        Integer a2=100;
        System.out.println(a1==a2);

        Integer a3=1000;
        Integer a4=1000;
        System.out.println(a3==a4);
    }
}

输出:

原因:

1.包装类是类,它属于引用数据类型,==在引用数据类型中比较的是地址是否相同

2.在编译阶段,Integer a=100;这句话会调用Integer类下的valueOf()方法

最终会被编译成Integer a=Integer.valueOf(100);

3.valueOf()方法

在valueOf()方法中,传进来的参数会进行if判断,如果参数在这个范围(-128~127)内,就直接返回,如果不在,返回的里面有一个new关键字,new关键字是在堆内存中开辟一块新的内存空间

标准答案:

在Integer中的valueOf()方法中,将-128~127之间的数值都存储在一个catch数组中,该数组相当于一个缓存,当我们在-128~127之间进行自动装箱时,就直接返回该值在数组中的地址,所以在-128~127之间的数值用==比较是相等的;而不在这个区间的数,则需要开辟一个内存空间,所以不相等

五、自动装箱、自动拆箱

1.自动装箱

自动装箱指的是基本数据类型转化成当前引用数据类型

Integer a=10;

这句话在编译的时候会被编译成 Integer a=Integer.valueOf(10);  涉及自动装箱

可以把Integer这个类理解成一个箱子,因为它除了变量,还有很多方法,相当于把int类型的值装进Integer,而且Integer a=Integer.valueOf(10); 这句话在编译的时候是自动完成的,所以叫自动装箱

2.自动拆箱

自动拆箱指的是引用数据类型转化成基本数据类型

Integer a=10;
int b=a;//这句话就涉及到自动拆箱

这句话在编译的时候会被编译成  int b=a.intValue();  涉及自动拆箱

因为int只能去存储值,相当于把值从箱子里拿出来,而且int b=a.intValue();  这句话在编译的时候是自动完成的,所以叫自动拆箱

六、巩固练习

下列输出是什么

public class Test {
    public static void main(String[] args) {
        int a=10;
        int b=10;
        Integer a1=10;
        Integer b1=10;
        Integer a2=new Integer(10);
        Integer b2=new Integer(10);
        System.out.println("1---"+(a==b));
        System.out.println("2---"+(a1==b1));
        System.out.println("3---"+(a2==b2));
        System.out.println("4---"+(a1==a));
        System.out.println("5---"+(a1.equals(a)));
        System.out.println("6---"+(a1==a2));
        System.out.println("7---"+(a==a2));
    }
}

输出

1---true
2---true
3---false
4---true
5---true
6---false
7---true

原因:

1---true

对基本数据类型来说,==进行的是值的判断,所以是true

2---true

从数组当中找数据,10在-128~127之间,对引用数据类型来说,==比较的是地址是否相等,所以是true

3---false

new关键字是在堆内存中开辟新的内存空间

4---true

包装类和基本数据类型用==进行判断的话,进行自动拆箱,自动拆箱之后,a1就成了int

类型的数据,这时候==进行的值的判断,所以是true

5---true

在这个equals()方法中,他先判断传进来的参数是否属于Integer类型,属于的话,就自动拆箱,然后判断值是否相等;不属于的话,就直接false


6---false

a1是在数组中,a2是开辟了一块新的内存空间

7---true

这里存在自动拆箱,然后进行的是值的判断

猜你喜欢

转载自blog.csdn.net/2201_76081438/article/details/141570828