在作Integer与100的值比较的时候,异想天开地写成了
Integer i = 100;
"100".equals(i)
结果得到的值为false。
作了如下测试:
public static void main(String[] args) {
//注意这边是对象Long,不是基本数据类型
Long l1 = 156622862025019l;
Long l2 = 156622862025019l;
System.out.println(l1==l2);//false 比较的是Long对象的内存地址
System.out.println("156622862025019l".equals(l1));//false 不同类型比较返回false
System.out.println(l1.equals(l2));//true 相同类型的equals比较
Integer i = 100;
Integer i2 = 100;
System.out.println(i == 100);//true Integer与基本类型比较时,Integer拆箱转换成基本类型进行比较
System.out.println("100".equals(i));//false 不同类型比较返回false
System.out.println(i.equals("100"));//false 不同类型比较返回false
System.out.println(i.equals(i2));//true 相同类型的equals比较
}
查看了String对象的equals方法,结果就很明了了,if (anObject instanceof String)判断对象类型是否一致,(继承和实现关系是算一致),如果对象不一致直接返回false。
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}