Java中比较两个对象相等的问题

先回忆下基本数据类型的比较。

例如连个int类型的变量比较,我们往往比较数值的大小,而不是比较“地址值”的大小。

        int num1 = 100;
        int num2 = 100;
        System.out.println(num1 == num2);//true

 

但是当我们比较引用数据类型的变量时,“==”比较的是地址,而equal比较的才是对象的内容。

Object类中的equals方法对于两个对象来说,效果等同于“==”,源码如下:

    public boolean equals(Object obj) {
        return (this == obj);
    }

 

为了比较两个对象的内容,我们可以对其进行重写,源码如下:

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }

这样,我们就可以比较两个对象的内容了。

简单总结下

当我们比较两个对象时,可以重写Object类的equals方法实现。

1、比较对象时,==比较的是“地址”,equals比较的是对象的内容

2、重写equals()方法必须重写hashcode方法。

posted @ 2020-02-14 23:33  focusDing  阅读(116)  评论(0)    收藏  举报