黑马程序员技术交流社区

标题: 关于equals问题 [打印本页]

作者: wyy283    时间: 2013-7-25 16:54
标题: 关于equals问题
本帖最后由 杨兴庭 于 2013-7-25 23:17 编辑

为什么用String类声明的对象去调用equals方法会返回true
比如String str1 = new String(“java”)
    String str2 = new String(“java”)
这个返回的是ture
但是下面的这个语句一定要重写equals中的方法才返回ture,不然就是false
Employee alice1 = new Employee("Alice Adams", 75000, 1987, 12, 15);
Employee alice3 = new Employee("Alice Adams", 75000, 1987, 12, 15);
作者: lljwdbklb    时间: 2013-7-25 17:25
String的实现开发人员早就写好了。。你可以看String的源代码。。
作者: nuoxi0318    时间: 2013-7-25 18:20
本帖最后由 nuoxi0318 于 2013-7-25 18:21 编辑

String是JAVA的基本类型,所有的字符串都是共享的,也就是说你的str1和str2虽然是new了两次,但实际上是一个对象实例,所以equals是true.
这个涉及到JVM对基本类型管理的知识了,JAVA中有很多类似的地方,例如:

  1. List a = new ArrayList(0);
  2. List b = new ArrayList(0);
  3.                
  4. System.out.print(a.equals(b)); // output true
复制代码

作者: の放下执著    时间: 2013-7-25 21:17
因为String类已经重写了equals方法,String类中的equals方法:   只要两个引用指向的对象内容一样就返回true。
一切类都直接或间接的继承上帝类object,在object中的equals方法,是当且仅当两个引用指向同一个对象时才返回true,否则返回false(API文档上面写有的,嘿嘿)。
Employee alice1 = new Employee("Alice Adams", 75000, 1987, 12, 15);
Employee alice3 = new Employee("Alice Adams", 75000, 1987, 12, 15);
自己创建的类,当子类中没有equals方法时,就会调用上帝object中的equals方法,所以就返回false了。要想返回true,可以自己重写equals方法。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2