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方法呢?
*/

解决方案 »

  1.   

    没有复写equals方法,改成下面的
    class S {
        int i = 0;    public boolean equals(Object b) {
            if (this.i == ((S)b).i)
                return true;
            return false;
        }
    }
      

  2.   

    你在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;
      }
      

  3.   

    刚才又查了下JDK,这么说的:Two objects e1 and e2 are considered equal if (e1==null ? e2==null : e1.equals(e2)).所以正想着是不是我的代码有问题呢,谢谢楼上两位,多谢
      

  4.   

    Arrays.fill(s1, t1);
    Arrays.fill(s2, t1);
    System.out.println(Arrays.equals(s1, s2));他是这个意思!
      

  5.   

    ChDw(米)的也有问题
    equals是public,不能缩小可见性