类似Integer这样的包装类,在使用 "==" 比较大小的时候,会调用valueOf方法进行比较。
下面是源码
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}
如果你new一个Integer的时候,整数类型在-128~127之间时,会使用缓存,造成的效果就是,如果已经创建了一个相同的整数,使用valueOf创建第二次时, 不会使用new关键字,而用已经缓存的对象。所以使用valueOf方法创建两次对象,若对应的数值相同,且数值在-128~127之间时,两个对象都指 向同一个地址。
例如
Integer i = 100;
Integer j = 100;
这时候,使用 "==" 比较 i 和 j 的时候,你会发现是 相等 的。
而
Integer i = 300;
Integer j = 300;
这时候,使用 "==" 比较 i 和 j 的时候,你会发现是 不相等 的。
更多内容请关注微信公众号“外里科技”
官方公众号 | 外里科技 |
运营公众号 | 英雄赚 |
微信 | wxid_8awklmbh1fzm22 |
1247408032 | |
开源代码 | https://gitee.com/B_T/beimi |