关于两个数组比较问题:代码如下,在Student类中自己写一个equals方法,参数是Student类型的,为什么在调用Arrays.equals方法的时候,这个自己定义的方法得不到调用呢?一定要覆盖掉Object基类中的equals方法才行么?
package ArrayTest;
import java.util.*;public class Test {
public static void main(String[] args){
Student[] stu1 = new Student[]{
new Student(1),new Student(2),new Student(3)
};
Student[] stu2 = new Student[]{
new Student(1),new Student(2),new Student(3)
};
System.out.println(Arrays.equals(stu1, stu2));
}
}class Student{
private int age ;
public Student(int age){
this.age = age;
}
public boolean equals(Student s){
return /*((Student)*/s.age==this.age;
}
}

解决方案 »

  1.   

    public boolean equals(Object o) {
    if (o.getClass() != Student.class)
    return false;
    Student s = (Student) o;
    return s.age == this.age;
    }
      

  2.   

    Arrays源码public static boolean equals(Object[] a, Object[] a2) {
            if (a==a2)
                return true;
            if (a==null || a2==null)
                return false;        int length = a.length;
            if (a2.length != length)
                return false;        for (int i=0; i<length; i++) {
                Object o1 = a[i];
                Object o2 = a2[i];
                if (!(o1==null ? o2==null : o1.equals(o2)))
                    return false;
            }        return true;
        }
      

  3.   

    最好对jdk源码debug一下,就什么都明白了
      

  4.   

    你调用的应该是Arrays的equals方法把
      

  5.   

    Arrays.equals判断数组是否相同调用的是对象的boolean equals(Object)方法,lz并没有重写这个方法而是写了一个boolean equals(Student)方法,在这里并没有被调用,所以判断的结果和lz所想的并不一样
      

  6.   

    你应该在student里写一个方法为boolean equals(student s),调用的时候为:student.equals(student s).
      

  7.   

    equals方法没有泛型,不像comparable接口,所以还是老老实实的覆盖Object方法吧