Java包装类:什么是包装类对象,什么是装箱拆箱,当编译遇到自动装拆箱发生了什么?(一篇搞定,不能再多了)

什么是包装类?

Java设计中一个核心的原则,即万物皆对象,也就是说一切要求用对象的形式描述,但是基本数据类型不是对象,这就很尴尬 矛盾了,为了解决这个尴尬 矛盾,采用 把基本数据类型包装成一个对象,以面向对象的思想去使用这些类型。

包装类作用?

采用基本数据类型包装的形式描述,让功能变得更加健壮,例如: Integer默认不是int的 0 而是 null ,那么比起基本数据类型,包装类对象它就多了一个状态,就像你打王者,除了0代表你没战绩,null 还可以代表你中途跑路了。

还有一个比较直观的,就是包装类给我们提供了很多方法可以使用,例如:数据可以转二进制,查看最大值最小值等等。

除了上面还有一个要点: 集合中不能存放基本数据类型,只能存放对象 所以当使用集合时,我们的就需要使用到包装类对象。

何为装箱拆箱?

装箱:基本数据类型转换成对应的包装类对象。

拆箱:包装类对象转换成对应的基本数据类型。
(装箱拆箱,自动装拆箱操作往下看)

Java提供了8种数据类型,对应8种包装类型

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

注意点:

是不是有人会疑问呢?怎么没有String呢???

或者压根看到我这段文字的的小伙伴才发现的,是不是平时吹基本数据类型把String也带上了 (→_→)

记住啦 在Java中String 不属于基本类型,String 是一个对象

好了,进入主题

装箱操作

把基本类型转换成对应的包装类对象

第一种装箱方式:直接使用new

int i = 10;
Integer num = new Integer(i);
System.out.print(num);

第二种装箱方式:调用valueOf()的方式

Integer num_2 = Integer.valueOf(20);
System.out.println("调用valueOf()的方式:" + num_2);

运行结果
在这里插入图片描述
扩展点:

细心的小伙伴你会发现,咦,打印对象不应该是地址吗,竟然是数字?

说明了什么?

包装类内部也覆盖了toString

public String toString() {
     return toString(value);
}

拆箱操作

与装箱相反,把包装类对象转成对应的基本数据类型

调用intValue方式拆箱,这里其实就是将Integer类型转化为Int类型

Integer num_1 = Integer.valueOf(20);
int num_2 = num_1.intValue();
System.out.println(num_1);
System.out.println(num_2);

运行结果

(很直观的区别在于num_1变量是Integer包装类对象所以可以调用方法,而num_2是基本类型int不能)
在这里插入图片描述

自动装箱

基本数据类型直接赋值给包装类对象

Integer num_1 = 66;
System.out.println(num_1);

自动拆箱

包装类对象直接赋值给基本数据类型

Integer num_1 = 66;
int num_2 = num_1;
System.out.println(num_2);

运行结果
在这里插入图片描述
很神奇是不是??

不用我们自己亲自去装箱拆箱

信你这颗剽悍的种子!坏得很 (●ˇ∀ˇ●)

那谁帮我们做了?

当然是我们的JVM啦,在我们编译的时候帮我们加上了valueOf,装箱了

想问我怎么知道的?

偷偷告诉你,用反编译工具查看编译后的class文件,有码有真相

编译的时候帮你加上了,没想到吧,哈哈

这种方式有一个术语称为: 语法糖

吃了这颗语法糖,该干的活,帮你干了,果然很甜呀

自动装箱拆箱 本质上是编译的时候帮你加上 valueOf 或 intValue

自动装箱 valueOf

	Integer num_1 = Integer.valueOf(66);

自动拆箱 intValue

	int num_2 = num_1.intValue();

最后:

如果再深入一些,还可以再剖析一下 valueOf 和 intValue 这两个关键字的一些机制的,但是昨日这篇写了我一天,今早也还在修修补补,时光来去总是匆匆,我想我只能留下次来写了,写博客以来,写的很慢,但也写的很较真,因为 把我会的,认真的分享 ,是我 一颗剽悍的种子 写博客一直不变的信条。如果你能看到这篇,说明咱们还是很有缘的,希望能带给你一些许帮助,创作的不易, 把我文章的知识带走,你的三连留下,点赞,评论,关注,是我最大的动力。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章