java学习笔记(5):equals和 == 的区别

文章目录

  • 1.==
  • 2.equals

1.==

(1)若==两边的变量是基本类型,则只要它们数值相等,就判断这两个变量相等,返回true。
java学习笔记(5):equals和 == 的区别_第1张图片
输出结果:在这里插入图片描述

(2)若==两边的变量是引用变量,则 ==比较的是这两个变量的内存地址,只有它们指向同一个对象时,才会返回true。
java学习笔记(5):equals和 == 的区别_第2张图片
输出结果:java学习笔记(5):equals和 == 的区别_第3张图片
结果分析:非new的str1和str2返回true,而只要涉及new,就会新开辟一块内存空间来存储(因此,内存地址肯定是不同的)
这里要强调一下
String str1 = “你好”;和String str2 = “你好” 的区别
对于前者;
JVM会将“你好”存储在运行时常量池。通过这种方式将其与String对象的引用str1绑定(JVM现在运行时常量池中个寻找是否有相同的常量,若有,则将引用str1指向“你好”,若无,则在运行时常量池开辟一个空间来存储“你好”,并将引用str1指向“你好”)
对于后者:
new关键字生成对象是在堆中进行的,而在堆中进行对象生成的过程中不会检测该对象是否已存在,因此用new来创建的对象一定是一个不同的对象(即内存地址不同,但是内存地址中存放的内容可以相同)

2.equals

equals比较的是两个对象的内容,如果不重载equals方法,自动调用object的equals方法(为重载比较的是内存地址),则和“==”一样。但String和Integer,默认重载了object类的equals方法(重载后比较的是对象的内容)
(1)在String类的源码中找到equals方法
发现String中重载了equals方法,比较的是对象的内容。并且该方法传递的参数是一个Object类参数
java学习笔记(5):equals和 == 的区别_第4张图片
(2)在Object类中找到equals方法
在这里插入图片描述
可以看到,未重载的equals方法比较的是两个对象的引用(即内存地址)
(3)对Sting类中equals方法的练习
java学习笔记(5):equals和 == 的区别_第5张图片
输出结果:java学习笔记(5):equals和 == 的区别_第6张图片

你可能感兴趣的:(#,java基础)