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相同

    }
}

Java 学习和实践笔记(28):equals方法的使用-LMLPHP

可以看到,上面是比较了两个对象的地址,所以肯定是不同,返回false.

如果想只比较id,则需要重写equals方法,用下面的方法自动生成:

Java 学习和实践笔记(28):equals方法的使用-LMLPHP

示例:

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(){};//写了自定义构造器如仍要默认的构造器,就需要写出来。


    @Override
    public boolean equals(Object o) { //重写equals方法,仅比较id
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        TestObject that = (TestObject) o;
        return id == that.id;
    }

    @Override
    public 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相同

    }
}

Java 学习和实践笔记(28):equals方法的使用-LMLPHP

03-06 22:25