java中关于equals方法的问题

fw_zhong 2006-06-06 11:48:07
Test t = new Test();
Test tt = new Test();

为什么t.getClass().equals(tt.getClass())返回true,而t.equals(tt) 返回false
它们区别在哪?谢谢!
...全文
111 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fw_zhong 2006-06-09
  • 打赏
  • 举报
回复
谢谢,二位的回答
OnlyFor_love 2006-06-06
  • 打赏
  • 举报
回复
1。基本类型,对象引用都在栈中; 而对象本身在堆中
2。"=="比的是两个变量在栈内存中的值,而即使变量引用的是两个对象,“==”比的依旧是变量所拥有的“栈内存地址值”。
3。equals()是每个对象与生俱来的方法,因为所有类的最终基类就是Object(除去Object本身);而equals()是Object的方法之一。
也就是说equals()方法来自Object类

观察一下Object中equals()的source code:

public boolean equals(Object obj) {

return (this == obj);

}

注意 “return (this == obj)”

this与obj都是对象引用,而不是对象本身。所以equals()的缺省实现就是比较

对象引用是否一致

所以要比较两个对象本身是否一致,须自己编写代码覆盖Object类里的equals()的方法.

来看一下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;
}

OnlyFor_love 2006-06-06
  • 打赏
  • 举报
回复
楼上说的对
zling1981 2006-06-06
  • 打赏
  • 举报
回复
t.getClass()和 tt.getClass() 的值都是Test ,所以equals的值当然相等
t和tt是两个不同的对象,所以equals的值不相等

23,404

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧