要彻底弄懂equals与==的区别,首先要了解JVM中的内存分配
1、基本数据类型:是存放在内存中的

2、引用类型:引用存放在中,对象数据存在内存中。比如:创建一个学生类:Student stu=new Student();//stu就是引用new Student()就是调用对象的构造方法在堆中开辟空间,通过栈中的引用来调用对象存在堆中的数据

3、==是比较内存地址equals()是比较内容是否相等(先这样理解)
彻底理解equals与==的区别
从源码上理解:
1、java.lang.Object类(所有类的父类)中的equals方法源码:底层也是用==比较的

彻底理解equals与==的区别
通过源码可以看出:Object类的equals方法是比较内存地址
2、其他类都是继承Object,所以继承的equals方法(没有对equals方法重写时)默认是比较地址

3、很多类对equals方法进行重写覆盖,如:String、Integer
String源码:通过源码可以看出,是比较两个字符串的值

彻底理解equals与==的区别
总结:
== 的作用:
  基本类型:比较的就是是否相同
  引用类型:比较的就是地址值是否相同
  
equals 的作用:
  基本类型:不是类,不能用equals方法比较
  引用类型:分两种情况
1、没重写equals方法:比较的是内存地址,我们自己定义的类也是比较内存地址的,如Student

2、重写equals方法:比较的是两个对象的变量值,也就是内容是否相等。如String、Integer

1)在Object中:==和equals没有区别,都是比较地址
2)在String类中(对Object中的equals方法进行了重写):equals比较的是两个对象的内容是否相等

相关文章:

  • 2021-04-23
  • 2021-04-26
  • 2021-12-01
  • 2021-10-16
  • 2021-10-18
  • 2021-12-29
  • 2022-01-31
猜你喜欢
  • 2021-12-05
  • 2022-01-20
  • 2019-08-21
  • 2022-12-23
  • 2021-06-29
相关资源
相似解决方案