前言:
在学习JavaSE的时候遇到了一点问题,就是在自动装箱的时候,使用==号进行判断总是和预想的结果不太一样,所以自己就对自动装箱的过程进行反编译,查看一下具体调用的函数,然后再对相应的函数进行解读和实验。
正文:
我们的基本数据类型对应的包装器类如下:
int | Integer |
---|---|
byte | Byte |
short | Short |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
通过反编译我们可以发现实际调用的是valueOf的这个方法,于是我们到具体的包装器类中去查看valueOf这个方法的详细代码。
可以看到调用的是valueOf(int i)这个方法,这个方法的代码如下:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
这个i相当于调入的函数: 我们来解读一下这段代码,相当于如果i大于等于low并且小于Cache里的high则不用创建一个新的对象,否则创建一个新的对象。