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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© DOOR 中级黑马   /  2013-12-28 14:47  /  1094 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 DOOR 于 2014-1-16 00:36 编辑
  1. class Person
  2. {
  3.          String name;
  4.         public Person(String name)
  5.         {
  6.                 this.name = name;
  7.                
  8.         }
  9. }
  10. class Hello
  11. {
  12.         public static void main(String[] args)
  13.         {
  14.                 Person p1 = new Person("lisi");
  15.                 Person p2 = new Person("lisi");
  16.                 System.out.println(p1.equals(p2));
  17.                 String s1 = new String("zhangsan");
  18.                 String s2 = new String("zhangsan");
  19.                 System.out.println(s1.equals(s2));        
  20.         }
  21. }
复制代码
//打印结果一真一假,什么原因?
//equals不是比较对象内容的吗?
//p1和p2内容不一样?

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

9 个回复

倒序浏览
p1.equals(p2)利用的是Object中的equals比较方法,该方法比较的是两个对象是否相同。显然,p1和p2都new了一个Person,是两个不同的对象所以该语句为false。
而s1.equals(s2)使用的是String类中的equals方法,该方法是复写了Object中的equals方法,使其比较方式为比较这两个字符串中的内容是否相同,相同则返回true,不同则返回false。很显然,s1和s2中的内容是相同的都为“zhangsan”。所以该语句为true。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
松毛 发表于 2013-12-28 15:16
p1.equals(p2)利用的是Object中的equals比较方法,该方法比较的是两个对象是否相同。显然,p1和p2都new了一 ...

==和equals在没有复写过父类Object的子类里,功能一样?可以这样理解吧?
回复 使用道具 举报
不能,== 只是比较字面值,在没有覆写object方法的情况掐,默认调用object类的equals方法,仍然和==不同,个人见解。
回复 使用道具 举报
郭振华 发表于 2013-12-28 16:04
不能,== 只是比较字面值,在没有覆写object方法的情况掐,默认调用object类的equals方法,仍然和==不同, ...

==比较的是地址值
equals比较的是否为同一对象
地址值不就决定了两个对象是否是同一个吗?
回复 使用道具 举报
DOOR 发表于 2013-12-28 15:37
==和equals在没有复写过父类Object的子类里,功能一样?可以这样理解吧?

这个地方的p1 == p2与p1.equals(p2)效果都是相同的,都比较的是p1和p2的地址值吧。
回复 使用道具 举报
DOOR 发表于 2013-12-28 16:31
==比较的是地址值
equals比较的是否为同一对象
地址值不就决定了两个对象是否是同一个吗?

恩,对的,我查了下,我理解错了,很长时间没看基础了。是这样,== equals 在这里的功能确实一样。但是你是构造的对象,用new的,这玩意,都是从堆中强制创建的,内存地址不可能一样。抱歉,耽误你时间了。
回复 使用道具 举报
松毛 发表于 2013-12-28 16:33
这个地方的p1 == p2与p1.equals(p2)效果都是相同的,都比较的是p1和p2的地址值吧。 ...

3Q通透了
回复 使用道具 举报
一句话  Person类里面的equals()方法没有被重写,而String里面的已经被重写了  所以结果会不一样
回复 使用道具 举报
郭振华 发表于 2013-12-28 16:49
恩,对的,我查了下,我理解错了,很长时间没看基础了。是这样,== equals 在这里的功能确实一样。但是你 ...

感谢你的回复
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马