昨天Java基本数据类型和引用类型一文中漏了几张图,已经补上,须要的本身回头去看,本系列文章首发于公众号:saysayJava。程序员
在让人疑惑的Java代码 - Java那些事儿 一文中咱们说到编译器自动为咱们加上valueOf这个方法吗?忘了不要紧,咱们来回顾一下,源代码以下:
数据库
编译一下,拿到class文件,咱们反编译一下,变成了以下代码:post
这个加上valueOf方法的过程,就是Java中常常说的装箱过程。测试
Java中一共有四类八种基本数据类型,除掉这几种类型,其它的都是对象,也就是引用类型。在JDK1.5中,给这四类八种基本类型加入了包装类,对应以下:3d
基本类型 包装类型cdn
第一类:整型
byte Byte
short Short
int Integer
long Long对象
第二类:浮点型
float Float
double Doubleblog
第三类:逻辑型
boolean Boolean内存
第四类:字符型
char Characterget
再看以下代码:
编译后的class文件:
能够看出来,当咱们变量声明为对象类型而赋值为基本数据类型时,Java编译器会对咱们的基本数据类型进行装箱,而咱们的变量声明为基本类型赋值为对象类型时,编译器又会对咱们的对象类型进行拆箱处理。彷佛你们都商量好了,用valueOf做为装箱方法,拆箱方法就各自表述吧,通常都是基本数据类型加上Value作为拆箱方法,如intValue,longValue,booleanValue,其它包装类型也大同小异,我就不一一测试了,你们本身动手试试吧。
将int的变量转换成Integer对象,这个过程叫作装箱,
反之将Integer对象转换成int类型值,这个过程叫作拆箱。
以上这些装箱拆箱的方法是在编译成class文件时自动加上的,不须要程序员手工介入,所以又叫自动装箱/拆箱。
看到这里,有些朋友会说,呀,好麻烦呀,已经有了基本类型,为何还要用包装类?
有人说,是为了让Java成为纯面向对象的语言,笑。
我认为,有如下几点:
一、对象是对现实世界的模拟(一切事物皆对象,经过面向对象的方式,将现实世界的事物抽象成对象),在现实中,假设咱们去一个系统(数据库)里查询学生李四的年龄,以下图:
这时候,录入员还没给李四录入年龄这一项,若是咱们用int来声明年龄,你们都知道int是要初始化的,默认状况下为0,0是什么意思,没出生吗?(固然也能够用-1来表示未录入,但总感受有点怪怪的),若是用Integer来表示,就没这个问题了,为null,就是未录入。
二、为泛型提供了支持。
三、提供了丰富的属性和API
注意,比较两个值是否相等请用equals方法,我在让人疑惑的Java代码 - Java那些事儿 一文中已经说得很清楚了,这里就不深刻了。
四、暂时还没想起来,想起来再补充。
下面咱们分析一下不一样的声明方式在内存中的展示,代码以下:
表现以下图:
若是喜欢本系列文章,请为我点赞或顺手分享,您的支持是我继续下去的动力,您也能够在评论区留言想了解的内容,有机会本专栏会作讲解,最后别忘了关注一下我。
转载无限欢迎,但请注明「做者」和「原文地址」。转载请在文中保留此段,感谢您对做者版权的尊重。如需商业转载或刊登,请联系做者得到受权。
上一篇:Java基本数据类型和引用类型 - Java那些事儿
下一篇:面向对象 - Java那些事儿