美文网首页
Java装箱与拆箱

Java装箱与拆箱

作者: BestFei | 来源:发表于2020-04-07 14:29 被阅读0次

一、基础知识

1、Java把内存划分成两种:一种是栈内存,另一种是堆内存。
2、int是基本类型,直接存数值;而 Integer是类,产生对象时用一个引用指向这个对象。
3、封装类位于java.lang包中。
4、封装类是引用传递,而基本类型是值传递。
5、基本类型的变量和对象的引用变量都是在函数的栈内存中分配 ,而实际的对象是在存储堆内存中。
6、Java中基础数据类型与它们对应的包装类见下表(共8种):

原始类型 包装类型
boolean Boolean
byte Byte
char Character
float Float
int Integer
long Long
short Short
double Double

7、"==" 和 "equals()" 方法
”==“可以用于原始值进行比较,也可以用于对象进行比较,当用于对象与对象之间比较时,比较的不是对象代表的值,而是检查两个对象是否是同一对象。
"equals()": 比较的是引用数据类型,根据不同的数据类型调用不同的equals方法。在特殊情况下可以重写equals方法。

二、装箱与拆箱的定义

装箱:(原始类型 to 包装类型)把基本类型用它们对应的包装类型进行包装,使基本类型具有对象特征。

Integer a = 2;
可以理解为:将数值2装在一个类型为Integer 的箱子里,并把a指向2这个箱子。
Integer b = new Integer(2);
显示装箱。生成一个新的箱子,并且这个箱子的值为2,让b指向这个箱子。

拆箱:(包装类型 to 原始类型)与装箱过程相反,把包装类型转换成基本类型。

int v = a.intValue();
将里面int的值取出来。

拆箱的意义:进行运算的时候,因为对象是不能直接进行运算的,而是要转化为基本数据类型后才能进行加减乘除。

三、装箱与拆箱的代码实现

以int 和Integer 为例,
装箱就是调用Integer 的valueOf方法new一个Integer 并赋值,
拆箱就是调用Integer 对象的int Value方法并赋值返回给int 。

Integer中的valueOf()方法
在Java中,会对-128到127的Integer对象进行缓存,当创建新的Integer对象时,如果符合这个这个范围,并且已有存在的相同值的对象,则返回这个对象,否则创建新的Integer对象。
valueOf()方法是个静态方法。当传进来的变量值在这个区间之内,直接用IntegerCache.cache[]数组里面的数返回,否则new一个新对象。
Integer的最大值为2^31 -1,最小值为 -2^31 。初始化Integer后,IntegerCache会缓存[-128,127]之间的数据,这个区间的上限可以配置,取决于java.lang.Integer.IntegerCache.high这个属性。所以Integer在初始化完成后会缓存[-128,max]之间的数据。cache属于常量,存放在java的方法区中。

相关文章

网友评论

      本文标题:Java装箱与拆箱

      本文链接:https://www.haomeiwen.com/subject/ntngphtx.html