😏恒等(==)
1. 对于基本数据类型,==就直接判断数据值是否相等
2. 对于引用数据类型,==在判断两个对象的地址是否相同
🙂equals
-
如果未重写equals()方法,则其功能与恒等(==)相同。
-
通常子类需要重写父类的equals方法
-
equals使用要求比较严格
– 如果两个对象恒等于(即p1 == p2结果为true),那么equals也相等
– 如果一个对象和NULL进行比较,结果需要返回false
– 如果一个对象和另一个对象类型不同对象比较,结果需要返回false -
重写equals()的同时也要重写HashCode()方法,重写HashCode()方法时为了使进行判断相等的两个值的HashCode相等。
class Dog{
String name ;
int age ;
//重写hashCode(),不重写的话会出现equals相同,但是哈希值不同的情况
@Override
public int hashCode() {
return Objects.hash(age, name);
}
@Override
public boolean equals(Object obj) {
if (this == obj)//比较两个对象的地址值是否相等
return true;
if (obj == null)//判断传入的对象是否为null
return false;
if (getClass() != obj.getClass())//判断两个对象的类是否相同
return false;
Dog other = (Dog) obj;//将传入的对象转换成Dog类型,比较年龄和名称是否相等
return age == other.age && Objects.equals(name, other.name);
}
}
这段代码定义了一个名为"Pig"的类,该类具有以下属性:
- name:一个字符串类型的属性,表示狗的名称。
- age:一个整数类型的属性,表示狗的年龄。
该类还重写了两个方法:
- hashCode():该方法根据年龄和名称计算并返回猪的哈希码。
- equals(Object obj):该方法用于比较两个狗对象是否相等。首先判断是否是同一个对象,如果是直接返回true。然后判断传入的对象是否为null,如果为null,则返回false。接下来比较两个对象的类是否相同,如果不同则返回false。然后将传入的对象转换为Dog类型,并比较年龄和名称是否相等,如果都相等则返回true,否则返回false。
通过重写hashCode()和equals()方法,可以在需要比较或存储狗对象时进行准确的比较和哈希码计算。