java比较两个对象是否相等

本文介绍了Java中如何通过重写equals()方法来比较两个对象的内容而非引用,并强调了同时重写hashCode()的重要性。提供了Person类的具体示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java比较两个对象,可以通过重写equals()实现。

1.比较对象时, ==比较的是地址,而equals()比较的是对象内容

2.重写equals()方法必须重写hashCode()

示例代码如下:

Person.java

可以自动生成get()、set()、构造函数、equals()、hashCode等方法。

Idea选择类的代码,写入属性名,如下为name和age,然后右键-->Generate,就可以自动生成了。

eclipse类似。搜索下快捷键也可以自动生成。

----------------------------------------------------------

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Person person = (Person) o;

        if (age != person.age) return false;
        return name.equals(person.name);
    }

    @Override
    public int hashCode() {
        int result = name.hashCode();
        result = 31 * result + age;
        return result;
    }

}

---------------------------------------------------------

public class ObjectEquals {
    public static void main(String[] args) {
        Person person1=new Person("lin",25);
        Person person2=new Person("lin",25);
        System.out.println("通过==比较对象:");
        if(person1==person2) {
            System.out.println("person1和person2是同一个人");
        }else {
            System.out.println("person1和person2不是同一个人");
        }
        System.out.println("通过重写equals()和hashCode()比较对象:");
        if(person1.equals(person2)) {
            System.out.println("person1和person2是同一个人");
        }else {
            System.out.println("person1和person2不是同一个人");
        }
    }


----------------------------------------------------------------------

结果如下所示:

hashCode根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现。  为何Object类需要这样一个方法?它有什么作用呢?



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值