Java--“==”和 equals()方法

Object类是所有Java类的根基类

Object类中equals() 方法源码如下:

public boolean equals(Object obj) {

    return (this == obj);

}

1、"==" 双等号 的作用是判断两个对象的内存地址是不是相等

即判断两个对象是不是同一个对象

基本数据类型==比较的是值,引用数据类型==比较的是内存地址

2、equals()方法 : 它的作用也是判断两个对象是否相等。

但它一般有两种使用情况:

1、类没有覆盖/重写equals()方法,继承自Object类,则通过equals()比较该类的两个对象时,等价于通过“==”比较这两个对象(比较对象的内存地址

2、类覆盖了equals()方法。一般,我们都覆盖equals()方法来比较两个对象的内容相等;若它们的内容相等,则返回true(即,认为这两个对象相等)

如果是基本变量,没有equals方法,基本变量的比较方式就只有 ==

如果是变量,由于在java中所有变量定义都是一个指向,内存地址,在这里==是比较两个对象的内存地址,而不是实际内存中的内容,如果要比较实际内存中的内容,那就要用equals方法

如果是你自己定义的一个类,比较自定义类用equals和==是一样的,都是比较内存地址,因为自定义的类是继承于object,而object中的equals就是用==来实现的,通过上述源码

Object类中的equals方法,底层是通过 == 来进行比较,所以比较的是对象的内存地址;很多情况下,我们比较对象并不需要比较对象的地址,而是只要是同一个类的不同对象,成员属性值相同,我们就认为是同一个对象,为了达到这个效果,就必须重写equals方法,让他们比较的是类的类型和成员变量的值

我们举例如下:

创建一个People类对象

public class People {
    private String name;

    public People() {
    }

    public People(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

    @Override
    //比较内容是否相等
    public boolean equals(Object obj){
        if (obj == null || !(obj instanceof People)) return false;
        if (this == obj) return true;
        People people = (People) obj;
        return  (this.name.equals(people.name));
    }
}

我们重写其equals()方法,根据名字是否相同来判断两个对象是否相等 

        People people1 = new People("张三");
        People people2 = new People("张三");

        /**
         * 未重写 equals()方法 之前,调用根类 Object的equals()方法,
         *     public boolean equals(Object obj) {
         *         return (this == obj);
         *     }
         * 此时 “==”双等号 比较的是内存地址是否相等,new 两个对象,内存地址不同
         *
         * 重写 equals()方法 之后,比较的是内容是否相等
         * */
        System.out.println("people1和people2是否相等:" + people1.equals(people2));//true
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值