在java中==和equals()的区别

56 篇文章 5 订阅

一和二面试回答就可以。

对象相等判断
== 和 equals 的区别是什么
== : 它的作用是判断两个对象的地址是不是相等。
即,判断两个对象是不是同一个对象。(基本数据类型 == 比较的是值,引用数据类型 == 比较的是内存地址)

equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:

情况1:类没有覆盖 equals() 方法。
则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。

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

一、==解读:

==分两类分析,既可以比较基本类型也可以比较引用类型,对于基本类型来说是比较的数值。对于引用类型来说比较的内存地址值。

二、equals解读:

它是属于java.lang.Object类里面的方法,Object里的equals里默认的是双等于==。分两种情况讨论:
一种是自定义类,看自定义类有没有重写equals方法,通常情况下,如果重写了equals则比较的是类中相应属性是否相等。如果没有重写equals方法,则仍然使用==比较的是地址。
一种是系统类(API中为我们提供的类),一般都自动帮我们重写了equals方法。比如String类,Integer,Date类等,这些系统类的类中equals比较的是类中属性值是否相等。即通常我们说的内容。

如图:
在这里插入图片描述

Object中的equals方法:

public boolean equals(Object obj) {
        return (this == obj);
    }

在这里插入图片描述

了解:

怎样重写equals()方法?
equals()的重写规则:

重写equals方法的要求:
1.自反性:对于任何非空引用x,x.equals(x)应该返回true。
2.对称性:对于任何引用x和y,如果x.equals(y)返回true,那么y.equals(x)也应该返回true。
3.传递性:对于任何引用x、y和z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也应该返回true。
4.一致性:如果x和y引用的对象没有发生变化,那么反复调用x.equals(y)应该返回同样的结果。
5.非空性:对于任意非空引用x,x.equals(null)应该返回false。

代码演示:

   @Override
    public boolean equals(Object o) {
       //自反性:当前对象的地址等于参数地址,我们认为,完全是同一个对象。(自己和自己玩)
        if (this == o) return true;
        
        // if (o == null ) return false:参数为空则不是同一个对象。
        //其中||:全假为假,有真为真。(这里我们选择有真为真,才能执行if后{中的语句})
        //如果参数既不等于null,又是同一个类,则继续if结果后的语句:强转比较属性
        //只要参数o为空,或者当前对象的类不等于参数的类,就认为不是同一个对象。
        if (o == null || getClass() != o.getClass()) return false;
        
		//强转
        A a = (A) o;
        
		//比较相应的属性
        return getAge() == a.getAge();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值