Java学习里程-----Java基础_16包装类

一、什么叫包装类

包装类,顾名思义,就是给类包装了一层东西生成的新的类。那么它是包装了什么类呢?

我们之前有说过,数据类型,Java中有默认的八大数据类型,这些数据类型呢无法作为对象来操作,而我们学习的是面向对象编程,没有对象我们怎么来操作这些数据呢,这时候,包装类出现了。

二、有那些包装类

可以说啊,每一种基本数据类型都有相对应的一个包装类,下面我们给出来:

Java学习里程-----Java基础_16包装类

三、包装类和基本数据类型

包装类可以转换成基本数据类型,基本数据类型也可以转换成包装类。

包装类转换成基本数据类型,我们叫装箱操作。相反的,我们叫做拆箱。下面我们来体验一下这个过程。

Java学习里程-----Java基础_16包装类

可以看到,装箱前,装箱后的值是一样的,说明没问题。然后我们体验一下拆箱:

Java学习里程-----Java基础_16包装类

也没有问题啊,妥妥的。

除去这种我们用代码转换的装箱、拆箱之外,Java还可以自动做转换。我们再来体验一下:

Java学习里程-----Java基础_16包装类

是不是,拆箱也是一样的,可以做到自动转换:

Java学习里程-----Java基础_16包装类

这时候我们在分析一下包装类,包装类的出现是可以作为对象来使用的,如何去证明?

这时候我们可以做这样一个操作,我们来定义一个Map集合,算了,List集合吧,让list集合存放int类型的数据,我们看可不可以。

Java学习里程-----Java基础_16包装类

我们会发现报错了,错误大致说的是:语法错误,插入“维度”以完成引用类型。什么意思呢?因为List后面的间括号里面放的是泛型(具体什么是泛型,我们后面来说,先了解即可)。泛型定义,不可以放int啊、boolean这样的基本数据类型,因为这些基本数据类型是指代的具体的值,而泛型里面需要的是一个引用类型(引用类型里面存放的是对象的内存地址)。

所以我们就没有办法放入int类型的数据,但是,有了包装类之后,就可以解决这个问题了。因为包装类就是对象的思想,每一个包装类中存放的都是一个对象。所以我们可以改一下程序:

Java学习里程-----Java基础_16包装类

注意!是java.util下面的啊,别引入错包了。

这时候,我们就可以向List中存放“int”类型的数据了,我们放几个,然后输出:

Java学习里程-----Java基础_16包装类

是不是,然后我们呢用一下我们以后会讲到的类型,我们来看一下,list中的对象的类型是什么。

Java学习里程-----Java基础_16包装类

可以看到啊,都是Integer类型。

四、类型转换

以前我们也说过类型转换,转换有两种,强制类型转换、自动类型转换,但是呢,自动类型转换我们用起来其实没有太大的感觉,我们一般发愁的都是强制类型转换。如果强制类型转换出错了,那么程序就不会继续向下执行了。但是有了包装类之后,我们这些个基本数据类型也可以相互转换了。

直接上案例,我们现在有两个char类型的数据,一个是1,一个是5,我们让它俩相加。我们的目的是想让它俩算出来6的,但程序会怎么做呢?

Java学习里程-----Java基础_16包装类

??? 102 是不是很神奇,我们来说一下为啥是102.

char被称为字符,它的+运算时这样算的,我们在键盘上敲打的每一个字母、字符、数字都可以在一个叫ASCII表中查找到一个数,我给出ASCll表的链接:ascii码。我们可以在上面找到,1 和 5 所对应的数字是

Java学习里程-----Java基础_16包装类

49 和 53,char运算是利用其在ASCII里的对应值进行加减运算,也就是用的49和53来运算的,所以才会输出102.

然后继续我们的课程。这么算是不是不对啊,我们发现超出我们的想象,怎么办呢,包装类进场!

Java学习里程-----Java基础_16包装类

我们现用String.valueOf()方法,将char转换成字符串,然后将字符串转换成int类型。这样就可以进行计算。