在以前学习java的时候就没搞懂这两者的区别,但并没有去深究。但在最近打算系统学习java的时候,又遇到了这个问题,所以我到处查看资料,终于搞懂了。

一。对于基本数据类型来说,==用来判断两个数据的值,而equals不能用于基本数据类型的比较

例如:

java中==和equals的区别

上面代码的运行结果:

java中==和equals的区别

二:1.对于大多数引用数据类型来说,==和equals来说都是比较的两个引用对象的地址。下面的例子可以说明:

java中==和equals的区别

上面代码的运行结果:

java中==和equals的区别

2.对于少部分引用类型来说(比如String,Integer,Date等),==比较的是两个引用对象的地址,equals比较的是两个对象里面的值。下面用String举例说明:

java中==和equals的区别

上面代码的运行结果:

java中==和equals的区别

结果解析:对于String类型的数据来说,在java中,程序在运行的时候会创建一个字符串缓冲池。程序运行时,首先会在这个String缓冲池中寻找相同值的对象,如果池中还没有,那么就会在池中创建一个该对象。在上面代码中,s1先被放到了池中,然后s2再去池中找到了s1所指向的同一个对象,由于是同一对象,所以==和equals返回的都是true。而s3和s4都是通过new出来的不同对象,所以他们的地址不同,而对象里面的值相同,所以==返回的是false,而equals返回的是true.由于s1指向的对象是存放在String缓冲池中,而s3是存放在堆中,所以s1和s3指向的也是两个不同的对象,故==返回的是false,equals返回的是true

 

java中==和equals的区别图一(大多数类中的equals方法)

究其根本原因equals是Object类(java中所有类的父类)中的一个方法,由于Object类是所有类的父类,所以所有的类都有同一个equals方法(这个equals的底层实现其实就是==)[见图一],但少数几个类(String,Integer,Date等)对equals方法进行了重写[见图二],使得产生了不同结果。

java中==和equals的区别图二(String类中的equals方法)

 

相关文章:

  • 2021-08-23
  • 2021-10-18
  • 2021-06-12
猜你喜欢
  • 2021-10-23
  • 2021-09-01
  • 2022-01-11
  • 2021-08-25
相关资源
相似解决方案