自动装箱、自动拆箱

在jdk1.5之前,需要向包装类中存储基本数据类型需要这样:
Integer iObj = new Integer(5);
int i = iObj.intValue();
而在jdk1.5之后,java引入了新特性,自动装箱与自动拆箱。
所以可以这样写:
Integer i = 5 ;
java共有八个基本数据类型,每个都有对应的包装类。
基本数据类型
包装类
byte
Byte
short
Short
int
Integer
long
Long
char
Character
float
Float
double
Double
boolean
Boolean


自动装箱:
Integer i = 10;
其实是编译器为我们做了一些额外的操作。反编译后代码应为如下:
Integer i = Integer.valueOf(10);

自动拆箱:
int x = i;
反编译后:
int x = i.intValue();

Integer a = 100;
Integer b = 100;
Integer c = 200;
Integer d = 200;
syso(a == b);
syso(c == d);


输出结果为
true
false
在Integer通过valueOf方法创建Integer对象的时候,当数值范围在[-128,127]之间的时候,便会指向一个已存在的对象的应用,否则会创建一个新的Integer对象。

若把上题的类型换为double类型,则两个结果都是false
注意,Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的。
Double、Float的valueOf方法的实现是类似的。


当 “==”运算符的两个操作数都是 包装器类型的引用,则是比较指向的是否是同一个对象,而如果其中有一个操作数是表达式(即包含算术运算)则比较的是数值(即会触发自动拆箱的过程)。 另外,对于包装器类型,equals方法并不会进行类型转换。

猜你喜欢

转载自blog.csdn.net/qq_38439885/article/details/79808540
今日推荐