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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wyy283 中级黑马   /  2013-7-25 16:54  /  1062 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 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);

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

3 个回复

倒序浏览
lljwdbklb 来自手机 中级黑马 2013-7-25 17:25:57
沙发
String的实现开发人员早就写好了。。你可以看String的源代码。。来自: iPhone客户端
回复 使用道具 举报
本帖最后由 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
复制代码

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
因为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方法。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

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