为什么java中的Integer包装类会有这样的规定:凡是一个Integer对象的值是在-128~127的范围内,那么它们的值和地址都是保证唯一性,而不在这个范围内就只有值相等而地址不同??public class Test { public static void main(String[] args) { Integer i1 = 100; Integer i2 = 100; if (i1 == i2) { System.out.println("i1==i2"); } else { System.out.println("i1!=i2"); } Integer i3 = 200; Integer i4 = 200; if (i3 == i4) { System.out.println("i3==i4"); } else { System.out.println("i3!=i4"); } }}结果: i1==i2 i3!=i4
我觉得就算-128~127 地址相等,也不要用==来比较吧。大写的类都用equals方法比较相等,这样靠谱。
public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}
到此应该恍然大悟了,IntegerCache缓存了[-128,127]之间的Integer对象,如果valueOf的参数i处于这之间,就返回缓存的对象。
首先,java 会当装箱,也就是形如:int - >Integer的装箱,因为小点的整数java会认为我们经常要用,而大一点的整数我们不怎么常用,就因为如此,
在一个字节之间,也就是 -128~127之间的整数,当装箱的时候,会缓存起来,当我们再次调用的时候,java就不会帮我们再创建新的,而是用我们原来的。
首先,java 会当装箱,也就是形如:int - >Integer的装箱,因为小点的整数java会认为我们经常要用,而大一点的整数我们不怎么常用,就因为如此,
在一个字节之间,也就是 -128~127之间的整数,当装箱的时候,会缓存起来,当我们再次调用的时候,java就不会帮我们再创建新的,而是用我们原来的。