先看代码再解释。
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内的Interger都是同一个对象引用,
所以第一个比较式true 之外的Interger 则不是同一个对象,所以比较为false。
重载的应该是equals()方法,所以如果用equals来比较应该都为true。
在JDK源码中Integer类有一个内部类IntegerCache,它默认创建了一个-128~127的Integer对象数组。
只要比较的是在这256个数内,就直接在对象池里查找并返回该对象。
这是Java处于性能的考虑,目的是节省内存。
至于范围之外的,不同的引用就不相等了。
posted on 2009-09-26 14:14
Worker 阅读(190)
评论(0) 编辑 收藏 所属分类:
J2SE/J2EE