喵喵喵~~~
小北今天想把Object类中的equals()方法想给大家更详细的解释一下下咯
首先equals()方法在默认的情况下比较的是对象的引用是否相同
源代码:public boolean equals(Object obj){
return ( this == obj );
}
但是呢,比较对象的引用没有很大的意义,因此呢,我们一般都建议重写该方法。一般用于比较成员变量的值是否相同。
public class day11code7 {
public static void main(String[] args) {
String a="hello";
String b="hello";
System.out.println(a.equals(b));
}
}
其实呢String这个时候已经被重写过了
因此输出的结果就是:true
那么如何来改写呢?
我们来举个例子:
public class day11code7 {
public static void main(String[] args) {
Name name=new Name("123");
Name name1=new Name("234");
name.equals(name1);
System.out.println(name.hashCode());
System.out.println(name1.hashCode());
}
}
class Name {
private String id;
public Name(String id) {
this.id = id;
}
public String toString(){
return this.id;
}
public boolean equals(Object obj) {
if (obj instanceof Name) {
Name name = (Name) obj;
return (id.equals(name.id));
}
return super.equals(obj);
}
public int hashCode() {
Name name = (Name) this;
return id.hashCode();
}
}
这是最简单的一个改写equals(),如果两个字符串内容相同则返回true,否则返回false
但是,但是,但是,但是,但是,但是,但是,但是,但是,但是,但是,但是,但是,但是,但是~~~~(手麻了)但是分隔符
大家有没有听说过这样一句话:当此equals()方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
what????????这是什么情况??????万脸懵逼!!!!!!!
好的,小北来解释 一下:上图:
简单的解释就是如果你只改写了equals()方法而没有改写hashCode()那么就有可能导致存储两个值相同的对象
那么为什么要重写hashCode()呢?重写hashCode()是为了将数据存入hashSet(),hashMap(),hashtable()时进行比较