黑马程序员技术交流社区
标题:
java基础知识提问!求解!
[打印本页]
作者:
521123270
时间:
2015-3-18 14:49
标题:
java基础知识提问!求解!
String类重写过equals方法与Object默认equals方法有什么区别!??比如new StringBuffer("java").equals(new StringBuffer("java")) 返回的是false!!而
new String("java").equals(new String("java"))返回的是true!为什么?求解!!!
作者:
看丶小胖
时间:
2015-3-18 16:18
先明确一点,StringBuffer没有重写Object他爹的equals方法,String重写了。
说一下两个方法的区别
Object类中的equals方法对比的是地址值。
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。 实现代码如下
equals()方法在object类中定义如下:
public boolean equals(Object obj) {
return (this == obj);
}
很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。
String类重写了euqals方法,equals方法对比的是对象的内容
这里的代码是java API文档中的String类覆写的equals方法。
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;
}
很明显,这是进行的内容比较,而已经不再是地址的比较
作者:
看丶小胖
时间:
2015-3-18 16:21
然后就显而易见了,StringBuffer类和String类分别创建了两个不同地址值的内容相同的对象,但是他们调用的equals方法做出的动作不一样,懂了么?
作者:
弹剑高歌踏浪行
时间:
2015-3-18 17:38
看丶小胖 发表于 2015-3-18 16:21
然后就显而易见了,StringBuffer类和String类分别创建了两个不同地址值的内容相同的对象,但是他们调用的eq ...
厉害厉害 {:3_46:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2