==和equals()方法

“==”

java中==为关系运算符,表示左边的数据是否和右边的数据相等,相等返回true否则返回false。基本数据类型之间的比较直接使用==,java是面向对象的语言,除了基本数据类型外的全部都为引用数据类型,也就是对象类型。引用数据类型在内存中的存储分为两部分,栈空间存储的为堆空间内存地址,堆空间存储实际的数据。直接使用==比较的是内存地址,但所得到的结果可能并不是我们想要的。
比如String的比较

1
2
3
4
5
6
7
8
9
10
代码段1
String str1 = "aa";
String str2 = "aa";
System.out.println(str1 == str2); //true
System.out.println(str1.equals(str2)); //true
代码段2
String str3 = new String("cc");
String str4 = new String("cc");
System.out.println(str3 == str4); //false
System.out.println(str3.equals(str4)); //true

看以上代码发现str1==str2truestr3==str4false,原因是因为java在编译期会将相同的字符串当做一个对象放入常量池,所以str1str2为同一个对象,==也为true。使用new String()来创建对象会强制创建两个不同的对象,所以str3==str4false。所以引用数据类型之间的比较一定不能使用==,而应使用equals()方法。

equals()方法

equals()方法为Object类的方法,源码如下;

equals(https://tva1.sinaimg.cn/large/00831rSTly1gcthn29xtkj30oy084t99.jpg)

Object类中的equals()方法和==比较是相同的,返回的是==比较的结果。
为了能使equals()方法比较对象的内容我们必须重写equals()方法。

String类中重写了equals()方法。源码如下:

String

String类的equals()方法首先比较的是不是同一个对象,是直接返回true,不是则判断是否是String类的对象,不是返回false,是接着比较字符串中的每一个char是否都相同,相同则返回true,否则返回false

所以String使用equals()方法比较的是字符串的内容。

我们自己写的类中可以使用IDE工具直接生成equals()方法,使其比较对象中的内容。