Java中==与equals()的区别。

首先,==是运算符而equals()是方法。==在比较基本数据类型时比较的是值,在比较对象时比较的是两个对象的物理地址。

而equals()是用来比较对象的方法,在基类Object中的源码是:

因为在基类中equals()是用==实现的,所以equals()在比较对象时比较的是两个对象的地址。但是,Java中有些类(如String类,Integer类等)对equals()进行了重写,使equals()与==在比较这些类的对象时有了区别。如在String类中,equals被重写后的源码是:


在String类中equals()先比较两个对象的物理地址,当两对象物理地址不想同时,会进一步比较两个对象所指向的内容。

举个例子

代码图:


结果:


内存分析图:


在这个例子中,代码图中的Person类没有对equals()进行重写,是继承了Object类中的equals方法。所以,在比较db1对象与db2对象时,equals方法与==一样比较的是两个对象的物理地址,即内存分析图中db1与db2后面的地址。而String类对equals方法进行了重写,所以在比较e对象与f对象时,equals方法先比较两个对象的地址,由于两对象地址不相等再进一步比较两个对象所指向的内容“abcd”字符串常量,而==只比较两对象的地址。d与b都是直接赋值字符串常量“abcd”,所以d与b的地址都是字符串常量“abcd”的地址。





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值