A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 闫月乐 中级黑马   /  2013-6-5 22:04  /  1688 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 闫月乐 于 2013-6-5 23:03 编辑
  1. class Demo
  2. {
  3. public static void main(String[] args)
  4. {
  5. String c=new String("abc");
  6. String b=new String("abc");

  7. boolean z=c.equals(b);
  8. System.out.println(z);
  9. }
  10. }
复制代码
equals方法不是比较两个对象中的内容是不是一样么?怎么上面那个程序是true,而下面那个却是false??
求牛人们告诉equals具体用法!!到底什么时候在什么语句用equals!越详细越好!!谢谢下面的这个代码,De类中的a是不是对象中的内容??,是的话,equals比较的是两个对象中的内容,不应该是true么?,我把a换成常量都不行,难道equals不能用在这个领域?
  1. class De
  2. {
  3. private int a;
  4. De(int a)
  5. {
  6. this.a=a;
  7. }
  8. }
  9. class Demo
  10. {
  11. public static void main(String[] args)
  12. {
  13. De d=new De(3);
  14. De e=new De(3);

  15. boolean z=d.equals(e);
  16. System.out.println(z);
  17. }
  18. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黑马伍哲沂 + 1 神马都是浮云

查看全部评分

9 个回复

倒序浏览

                int a= d.a;
                boolean z=(a==(e.a));

                System.out.println(z);
这样结果就true了,  第二部分的代码 比较的是对象,而不值,所以是false
回复 使用道具 举报
4968547610317 发表于 2013-6-5 22:13
int a= d.a;
                boolean z=(a==(e.a));

我知道==是比较的两个变量的值,可是equals不是比较对象中的内容么?第二段代码中,d,e不就是对象么?他们中的内容不都是3么?我要问的是equals,不是==
回复 使用道具 举报
equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码:
String a=new String("foo");
String b=new String("foo");
两条new语句创建了两个对象,然后用a/b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。
回复 使用道具 举报
)对于非字符串变量,equals比较的内存的首地址,这时候和==是一样的,即比较两边指向的是不是同一个对象,
回复 使用道具 举报
飘哥1988 发表于 2013-6-5 22:36
equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是 ...

恩!第一个代码里我能明白,我不懂得主要是第二个代码,难道第二个代码中的两个对象中的内容不一样?
回复 使用道具 举报
第一个程序 在String中重写了 equals 方法,重写的equals方法中比较的是对象的内容,所以为true

而你第二个程序 De类中并没有重写 equals 方法,所以调用的equals 方法依旧是从object类中的方法 比较的是对象的哈希值

评分

参与人数 1技术分 +1 收起 理由
黑马伍哲沂 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
禾呈 发表于 2013-6-5 22:44
第一个程序 在String中重写了 equals 方法,重写的equals方法中比较的是对象的内容,所以为true

而你第二 ...

哦啦!谢啦!这两句说到点子上了!呵呵
回复 使用道具 举报
4968547610317 发表于 2013-6-5 22:38
)对于非字符串变量,equals比较的内存的首地址,这时候和==是一样的,即比较两边指向的是不是同一个对象, ...

呵呵!谢啦!从API中查到了!
回复 使用道具 举报
第二个是直接调用的继承于Object中的equals方法,比较的是地址,String重写了equals方法,比较的是内容
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马