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方法。

浙公网安备 33010602011771号