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

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

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

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

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

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

举个例子

代码图:

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

结果:

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

内存分析图:

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

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





相关文章:

  • 2021-09-10
  • 2022-01-13
  • 2021-11-06
  • 2022-12-23
  • 2021-05-20
  • 2021-07-25
  • 2021-10-15
猜你喜欢
  • 2021-12-10
  • 2021-11-21
  • 2022-01-09
  • 2022-01-23
  • 2021-12-09
  • 2021-07-10
  • 2021-06-18
相关资源
相似解决方案