先猜测一下下面这段代码运行的结果:
public class test {
public static void main(String[] args) {
Integer i1 = 127, i2 = 127, i3 = 128, i4 = 128;
System.out.println("i1==i2------->"+(i1==i2));
System.out.println("i1==i2------->"+(i1.equals(i2)));
System.out.println("i3==i4------->"+(i3==i4));
System.out.println("i3==i4------->"+(i3.equals(i4)));
}
}
这段代码的运行结果是:
i1==i2------->true
i1==i2------->true
i3==i4------->false
i3==i4------->true
猜到了吗?为什么结果是这样呢?
实际上我们在用Integer a = 数字l来赋值的时候,Integer这个类是调用下面这个方法来进行的:
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}
显然,这段代码做了一个判断,如果-128=<i<=127的时候,则直接返回一个int原始数据类型;否则new一个对象,而==在比较对象时比较的是内存地址,在比较原始数据类型时比较的是值,这就不难解释上述例子的运行结果了。