标题Java中==和equals()方法的比较
Java中判断数据是否相等有两种方式,分别是==和equals()方法。
-
==分为两种情况:
第一种:如果判断的是两个基本数据类型的数据,则比较的是值是否相等。
第二种:如果判断的是两个引用数据类型的数据,则比较的是两个引用的地址是否相等。 -
equals()方法:
equals()方法是Object类中的方法,我们自定义类使用equals()方法时需重写,这是因为在Object类中,equals()方法使用 == 来判断两个数据是否相等,如果我们自定义类时直接调用Object类中的equals()方法,和使用 == 判断没有什么区别。使用==判断引用数据类型时必须两个引用的地址相同才算两个数据相等,而实际上我们在很多时候比较两个引用时,只需要他们对应的属性相等就认为这两个引用相等。比如我们定义了一个People类,该类中有账号和密码两个int型属性,我们只需要new出来的两个People类的对象的账号和密码都分别相等就认为这两个对象相等,如果使用双等号判断的是new出来的两个对象的地址是否相等。
我们先来看Object类中equals()方法是怎么实现的:
再看一下String类中是如何重写equals()方法的,给我们提供一些思路:
接下来是我自己的People类和测试代码:
class People{
int id;//账号
int password;//密码
public People(int id,int password) {
this.id = id;
this.password=password;
}
@Override
public boolean equals(Object obj) {
if(this==obj) {
return true;
}
if(obj instanceof People) {//判断比较的是否是People类的对象
return (id == ((People) obj).id)&&(password == ((People) obj).password);//账号和密码都相同才返回true
}
return false;
}
}
public class EqualsTest {
public static void main(String[] args) {
People p1=new People(1,123);
People p2=new People(1,123);
People p3=new People(1,456);
People p4=new People(2,456);
System.out.println(p1.equals(p2));//账号密码都相等,打印结果为true
System.out.println(p1.equals(p3));//账号相等,密码不相等,打印结果为false
System.out.println(p3.equals(p4));//账号不相等,密码相等,打印结果为false
}
}
如果注释掉重写的equals()方法,打印结果都为false,这就是调用了Object类中equals()方法,可以看出比较的是对象的地址。