关于Arrays.equals()的一点疑惑

Trainsp0tting 2005-10-28 01:30:53
import java.util.*;

public class Test {
public static void main(String[] args) {
S[] s1 = new S[5];
S[] s2 = new S[5];
S t1 = new S();
S t2 = new S();

Arrays.fill(s1, t1);
Arrays.fill(s2, t2);

System.out.println(Arrays.equals(s1, s2));
System.out.println(t1.equals(t2));
}
}

class S {
int i = 0;
boolean equals(S b) {
if(this.i == b.i)
return true;
return false;
}
}

/*程序的输出是:
false
true

可我在《thinking in java》上看到是这样介绍Arrays.equals()的:
“为了能比较数组是否完全相等,Arrays提供了经重载的equals()方法。当然,也是针对各种primitive以及Object的。两个数组要想完全想等,它们必须有相同数量的元素,而且数组的每个元素必须与另一个数组的相对应位置上的元素相等。-->元素的相等性,用equals()判断<-- ”

最后那句话的意思不是说,当Arrays.equals()方法的参数为对象数组时,它会调用此类对象的equals()方法吗?可是我已经重载了呀,怎么输出还是False呢?
或者,Arrays.equals()调用的只是根类的equals方法呢?
*/
...全文
464 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
believefym 2005-10-28
  • 打赏
  • 举报
回复
ChDw(米)的也有问题
equals是public,不能缩小可见性
yanxiazhiqiu 2005-10-28
  • 打赏
  • 举报
回复
Arrays.fill(s1, t1);
Arrays.fill(s2, t1);
System.out.println(Arrays.equals(s1, s2));

他是这个意思!
Trainsp0tting 2005-10-28
  • 打赏
  • 举报
回复
刚才又查了下JDK,这么说的:

Two objects e1 and e2 are considered equal if (e1==null ? e2==null : e1.equals(e2)).

所以正想着是不是我的代码有问题呢,谢谢楼上两位,多谢
ChDw 2005-10-28
  • 打赏
  • 举报
回复
你在S 中定义的方法是错误的,你是新定义了一个equals方法,而不是覆盖了Object.equals方法
应该是

boolean equals(Object obj) {
if(!obj instanceof S) return false;
S b = (S) obj;
if(this.i == b.i)
return true;
return false;
}
believefym 2005-10-28
  • 打赏
  • 举报
回复
没有复写equals方法,改成下面的
class S {
int i = 0;

public boolean equals(Object b) {
if (this.i == ((S)b).i)
return true;
return false;
}
}

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧