标签:
==在八种原始数据类型中,判断的是两边的值是否相等。对于对象类型来说,判断的是内存地址,所以为true所满足的条件就是两边的引用指向同一个对象。
比如String s1 = "abcde"; String s2 = "abcde";这个时候如果判断两者是否==,值为true;这是因为两者指向同一个对象。
然而如果String s1 = "abcde"; String s2 =new String("abcde");则为false;因为指向的不是同一个对象。
equals()方法一般是继承与Object,在Object中,方法定义是这样的:
public boolean equals(Object obj) {
return (this == obj);
所以说如果没被改写,判断的也是内存地址,和==是相同的
然而需要注意的是String类中是改写了这个方法的
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;
}
比较的是两者的字符串的内容是否相等。这样equals()和==在String里面就不是一个意思;
==成立的时候equals肯定成立
==不成立的时候,equals未必不成立
比如“ XXXX ”.trim()和“XXXX”,是两个对象,所以一定不能==成立
但是equals是成立的。
标签:
原文地址:http://www.cnblogs.com/chuliang/p/5789836.html