细谈java中==和equals的区别

java中==和equals的区别

在JDK1.8中,我们在判断相等的时候,使用==或者equals是必不可少的,可是它们两个有什么区别呢?

首先我们先看看equals的方法,我们都知道equals是超类Object中的方法,先看看Object是怎么实现的:

                           

因为equals是Object中的方法,是所有类的父类,所以不适合于大多数场景。所以,我们在使用的时候,一般都是要重写Object中的equals方法。而Object中的equals方法,底层操作依然是使用==进行比较的。

两个方法的作用

==方法的作用:如果比较的是Java中的基本类型,比较的是储存的值是否相等,如果是引用类型,则比较的是两个地址是否相等。

equals方法的作用:判断两个对象是否引用同一个对象,即看他们的地址是否相同。

在java中,对于基本类型,变量直接储存的是“值”,而对于引用类型,变量储存的则是对象的引用。

所以对于引用来说,如果没有重写equals方法,它的使用效果和==是相等的

看个列子:

                                       

                                     没有重写equals                                            重写equals            

通过上面的图,我们就可以看出来,当比较的都是对象的时候,如果没有重写equals,它的作用和==相等的,都比较的是地址,而当我们重写equals后,equals比较的就是我们重写后的值,==依然比较的是地址 。

对于String,JDK已经重写了equals方法

                                                  

通过对源码的剖析,我们可以看出来,String类底层通过equals方法比较的时候,比较的是,两个字符串中的每一个字符是否相等。

例如:

可以看出来,String通过重写父类后的方法后,对字符串的值进行了比较。

总结

1、对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等。

      如果作用于引用类型的变量,则比较的是所指向的对象的地址。

2.对于equals方法,注意:equals方法不能作用于基本数据类型的变量。

如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址。

诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

                   

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值