== 与equals 的区别
从object层次来说。== 与equals 是相同的,都是比较内存地址,也就是说,都是比较两个引用是否指向同一个对象,是则返回true
,否则返回false。
但是很多类 overwrite了equals方法,最典型的是String 类。
下面我们来看一下jdk源码 真相大白----呵呵:
Object.java:
String.java:
从object层次来说。== 与equals 是相同的,都是比较内存地址,也就是说,都是比较两个引用是否指向同一个对象,是则返回true
,否则返回false。
但是很多类 overwrite了equals方法,最典型的是String 类。
下面我们来看一下jdk源码 真相大白----呵呵:
Object.java:
public boolean equals(Object obj) {
return this == obj
}
String.java:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}