代码如下(已经在jdk1.6.10下编译测试运行,无异常报错)
public TestEquals{
public static void main(String... args){
for(int i=0;i<150;i++){
Integer i1 = i;
Integer i2 = i;
System.out.print("i=" + i + " ");
System.out.println(i1.equals(i2));
}
}
}输出结果令人迷惑:
i=1 true
i=2 true
...
i=127 true
i=128 false
...
i=149 false为什么从i=128开始,euqals比较输出就为false???
我也是在无意中发现,开始设定i=5时,输出为TRUE,后来设定一个i=200,输出就为false;所以写了上面这个循环测试代码。
初学者,还请各位高手指点迷津......
public TestEquals{
public static void main(String... args){
for(int i=0;i<150;i++){
Integer i1 = i;
Integer i2 = i;
System.out.print("i=" + i + " ");
System.out.println(i1.equals(i2));
}
}
}输出结果令人迷惑:
i=1 true
i=2 true
...
i=127 true
i=128 false
...
i=149 false为什么从i=128开始,euqals比较输出就为false???
我也是在无意中发现,开始设定i=5时,输出为TRUE,后来设定一个i=200,输出就为false;所以写了上面这个循环测试代码。
初学者,还请各位高手指点迷津......
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
} public int intValue() {
return value;
}
i1.equals(i2)改成i1==i2就是你说的那样,我不懂原因
但做了优化一个字节,128不在这个范围。
http://topic.csdn.net/u/20081119/12/b3c447ef-6665-4225-8d36-60e211663bb3.html
没有关键字class哎。
我在自己机器上测试发现使用equals返回的总是true,而使用==返回的和楼主的输出结果一样。
看来==比较的是引用,而equals比较的是引用的对象。///:TestEquals.java
public class TestEquals{
public static void main(String[] args){
for(int i=0;i <150;i++){
Integer i1 = i;
Integer i2 = i;
System.out.print("i=" + i + " ");
System.out.println(i1==i2);
}
}
}
但做了优化一个字节,128不在这个范围。