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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马上都有 中级黑马   /  2014-5-20 17:41  /  1843 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么用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);

7 个回复

倒序浏览
首先:equlas是超类Object里面的方法,它的出现是为了判断两个对象是否指向同一个引用。因此如果直接调用equlas的话就是比较两个对象的地址。
而String类里面复写了equals方法,它比较的是两个字符串的内容是否相同。因此你上面的两个问题,正解。
由此看出来,我们如果想用equals方法比较我们自定义内容时,就需要复写该方法。
比如:我们要比较person类里面的人名字
public boolean equals(Object obj)
{
if(obj instanceof Person)
person p=(person)obj;
retrun this.name.equals(p.name)
}
回复 使用道具 举报
字符串的equals是判断字符串内容是否相同的
回复 使用道具 举报
字符串的equals是判断字符串内容是否相同而你定义的两个雷如果不重新equals方法比较的是连个对象的hash值是否相等
回复 使用道具 举报
二楼说的很明白,string类复写了eauals方法
回复 使用道具 举报
  1. public boolean equals(Object anObject) {
  2.         if (this == anObject) {
  3.             return true;
  4.         }
  5.         if (anObject instanceof String) {
  6.             String anotherString = (String) anObject;
  7.             int n = value.length;
  8.             if (n == anotherString.value.length) {
  9.                 char v1[] = value;
  10.                 char v2[] = anotherString.value;
  11.                 int i = 0;
  12.                 while (n-- != 0) {
  13.                     if (v1[i] != v2[i])
  14.                             return false;
  15.                     i++;
  16.                 }
  17.                 return true;
  18.             }
  19.         }
  20.         return false;
  21.     }
复制代码
这是String类的源文件
String类的equals方法不能被复写,String是final类型无法继承,不能复写方法,
判断两个对象是否相等hashCode()方法和equals()方法都要复写  
这是老毕说的
回复 使用道具 举报
凡是是用obj的都是java顶层封装好的,比的是父类中的equals,而在自己定义的对象中,不能用父类的equals去比较,必须重写父类的  hashCode() 和equals()方法,自定义的类创建的对象,每new出的一个,对象对象的地址不一样,要定义他们的比较方法,为了安全起见而不是用java写好的方式比较,
回复 使用道具 举报
String类中本身就重写了equals方法,比较的是字符串,而我们自己定义的类默认继承object,不重写equals方法调用的就是object类的equals,而object类的equals比较的是地址
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马