equals() 是Object类里的一个方法。而Object类是所有类的父类,所有的Java对象都拥有Object类的属性和方法。一切类,如果在类的声明中未使用extends,则默认继承Object类。如果声明了,那么Object类就变成该类的父类的父类的...类,该类也一样可以使用equals()方法。
equals用来比较两个对象是否相同。默认情况下(也就是在Object类里的原始定义的方法),如果对象是基本类型,那么比较的是两个对象的值是否相等。如果对象是引用类型(所谓引用类型,就是自己定义的那些类),那么就是比较两个对象的地址是否相同。
如果在实践中,我们比较两个对象时,认为某一个属性相同时,就认为这两个对象相同,那么这个时候就不能直接使用默认情况下,需要重写equals()这个方法。否则没法实现这个属性相同,就认为两个对象相同的功能!因为不同的对象,总是有不同的地址,按原来的比较方法,是不可能认为两个对象相同的。
示例如下:
public class TestObject {int id;String name;String pwd;public TestObject(int id, String name, String pwd) {//自定义的构造器this.id = id;this.name = name;this.pwd = pwd;}TestObject(){};//写了自定义构造器如仍要默认的构造器,就需要写出来。public static void main(String[] args) {
/* TestObject t1 = new TestObject();System.out.println(t1.toString());//使用toString()方法得到t1的地址TestObject t2 = new TestObject();System.out.println(t2.toString());System.out.println(t2);//如果不写toString,默认也是调用toString()*/TestObject t3 = new TestObject(1001,"张三","123456");TestObject t4 = new TestObject(1001,"李四","654321");System.out.println(t3.toString());System.out.println(t4.toString());System.out.println(t3.equals(t4));//判断t3是否与t4相同}
}
可以看到,上面是比较了两个对象的地址,所以肯定是不同,返回false.
如果想只比较id,则需要重写equals方法,用下面的方法自动生成:
示例:
import java.util.Objects;public class TestObject {int id;String name;String pwd;public TestObject(int id, String name, String pwd) {//自定义的构造器this.id = id;this.name = name;this.pwd = pwd;}TestObject(){};//写了自定义构造器如仍要默认的构造器,就需要写出来。@Overridepublic boolean equals(Object o) { //重写equals方法,仅比较idif (this == o) return true;if (o == null || getClass() != o.getClass()) return false;TestObject that = (TestObject) o;return id == that.id;}@Overridepublic int hashCode() {return Objects.hash(id);}public static void main(String[] args) {
/* TestObject t1 = new TestObject();System.out.println(t1.toString());//使用toString()方法得到t1的地址TestObject t2 = new TestObject();System.out.println(t2.toString());System.out.println(t2);//如果不写toString,默认也是调用toString()*/TestObject t3 = new TestObject(1001,"张三","123456");TestObject t4 = new TestObject(1001,"李四","654321");System.out.println(t3.toString());System.out.println(t4.toString());System.out.println(t3.equals(t4));//判断t3是否与t4相同}
}