在什么情况下,要重写equals和hashCode方法啊!重写之前为什么不能直接用呢?求举例子

解决方案 »

  1.   

    直说equals,如果你定义的类的成员变量有引用类型,就需要重写equals方法。
    这个跟c++中的指针作为成员变量时要重写拷贝构造函数一样。随便找本书看,都会仔细的说这个。
      

  2.   

    比如equals,默认的equals是"==",可以比较数值,但是涉及到对象,肯定返回false。如果我们有一大堆对象需要排序,这个相等的依据是和业务相关的,那么就需要重写equals方法才能进行判断。
      

  3.   

       我在这里发表一下我的理解:首先你的弄清楚是String的equals方法还是Object对象的(非String对象) ,如果是String那么equal是比较的是字符串的内容(例子 String s="my";String s2="my";那么s.equals(s2)为true  如果是通过new的方式则需要重写String s=new String("my")),   而Object对象的equals默认比较的是引用地址,意思就是默认实现==一样的功能,不是真正的比较对象的内容,所以这个时候就要自己重写equals方法啦。   这是我个人理解,不对的请大家指正。
      

  4.   

    你可以看一下这个代码:重写了equals() ,hashCode()
    import java.util.HashSet;public class SetTest3
    {
    public static void main(String[] args)
    {
    HashSet set = new HashSet(); Student s1 = new Student("zhangsan");
    Student s2 = new Student("zhangsan"); set.add(s1);
    set.add(s2); System.out.println(set); }
    }class Student
    {
    String name; public Student(String name)
    {
    this.name = name;
    } public int hashCode()
    {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    return result;
    } public boolean equals(Object obj)
    {
    if (this == obj)
    return true;
    if (obj == null)
    return false;
    if (getClass() != obj.getClass())
    return false;
    Student other = (Student) obj;
    if (name == null)
    {
    if (other.name != null)
    return false;
    }
    else if (!name.equals(other.name))
    return false;
    return true;
    }}
      

  5.   

    如果是字符串,equals是比较字符串是否一样;如果是对象,equals是比较内在地址,也就是说是不是同一个对象。重写equals一般是对对象来说,如果两个对象不是同一个对象,但是对象某个值或某些值一样,你就认为他们是相同的话,可以重写equals来满足需求。例如,方块5与黑桃5是不同的对象,但它们的值一样就认为相等的话,可以重写equals,重写hashCode就是对==作用的,思路和上面讲的一样。希望把你误导了。
      

  6.   

    equals为true,hashCode相同,就是==
      

  7.   

    其实equals比较的是字符串的相等,然而能比较的前提是要相同类型,指针是内存地址,而字符串是内容
      

  8.   

    equals用于比较两个字符串的地址是否相同,