Java中==和equals()方法的比较

标题Java中==和equals()方法的比较

Java中判断数据是否相等有两种方式,分别是==和equals()方法。

  1. ==分为两种情况:
    第一种:如果判断的是两个基本数据类型的数据,则比较的是值是否相等。
    第二种:如果判断的是两个引用数据类型的数据,则比较的是两个引用的地址是否相等。

  2. 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()方法,可以看出比较的是对象的地址。

发布了19 篇原创文章 · 获赞 9 · 访问量 2222

猜你喜欢

转载自blog.csdn.net/weixin_44480874/article/details/98536144