关于equals的简单问题

scottwhb 2004-09-09 09:34:28
class Value
{
int i;
}

public class test
{
public static void main(String[] args)
{
Value v1=new Value();
Value v2=new Value();
v1.i=v2.i=10;
System.out.println("v1="+v1.i);
System.out.println("v2="+v2.i);
System.out.println(v1.equals(v2));
}
}
大家能说说为什么System.out.println(v1.equals(v2));的结果是false?

对比两个对象的实际内容是否相同,必须使用所有对象都适用的特殊方法equals()。
...全文
95 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyingbug 2004-09-09
  • 打赏
  • 举报
回复
你调用的equels()是object的equels(),它们当然不同了

你应该覆写equels()方法
jerrysoft 2004-09-09
  • 打赏
  • 举报
回复
你可能需要重载equals方法,你自定义的类编译器可能无法确定比较的方法,只能根据最原始的reference地址进行比较(object的equals方法),所以你需要重载你的equals方法。
你可以看到比如String的equals方法,它也是重载的。比较的规则需要你自己来定义。
haroyy 2004-09-09
  • 打赏
  • 举报
回复
v1,v2都是句柄,他们指向不同的内存地址,equals比较的是两个句柄,如果你要比较两个对象的实际内容,就必须重载equals()
qukmei 2004-09-09
  • 打赏
  • 举报
回复
再说你自己写的类,没有实现了equals()这个方法,知道吧,你可以看一下String的源码
qukmei 2004-09-09
  • 打赏
  • 举报
回复
对象再比的是地址!
scottwhb 2004-09-09
  • 打赏
  • 举报
回复
应该说v1, v2是两句柄,它们指向的对象的实际内容都是1,根据这些,System.out.println(v1.equals(v2));返回的应该是true呀?

62,614

社区成员

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

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