Java字符串String相等判断equals和==的区别

简要说明

在C++中,比较两个string字符串相等,通常使用的是 ==,这也是因为string类中,对 == 运算符对应的方法做了重载。

同样的 == ,在Java中,用法可是完全不一样的;今天就说说Java字符串String判断是否相等的equals和 == 的区别。

equals()比较的是对象的内容,并且区分内容的大小写;但是如果使用 == 比较两个对象时,比较的是两个对象的内存地址,所以不相等。

即使它们内容完全相等,但是不同对象的内存地址也是不相同的。所以,一定不要使用 == 运算符检测两个字符串是否相等!

代码验证

下面用一段示例代码验证下,其中使用+或者concat()方法创建的字符串,都会构造出新的String对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class StringEqual {
public static void main(String[] args) {
String str = "str";
String str1 = "string";
String str2 = str1; // 引用,地址相等,内容相等
String str3 = str.concat("ing"); // 新对象
String str4 = str + "ing"; // 新对象

System.out.println("str1: " + str1);
System.out.println("str2: " + str2);
System.out.println("str3: " + str3);
System.out.println("str4: " + str4);

// ==
System.out.println("str1 == str2: " + (str1 == str2));
System.out.println("str1 == str3: " + (str1 == str3));
System.out.println("str1 == str4: " + (str1 == str4));
System.out.println("str3 == str4: " + (str3 == str4));

// equals
System.out.println("str1.equals(str2): " + str1.equals(str2));
System.out.println("str1.equals(str3): " + str1.equals(str3));
System.out.println("str1.equals(str4): " + str1.equals(str4));
System.out.println("str3.equals(str4): " + str3.equals(str4));
}
}

上述代码执行后,看下验证结果:

1
2
3
4
5
6
7
8
9
10
11
12
str1: string
str2: string
str3: string
str4: string
str1 == str2: true
str1 == str3: false
str1 == str4: false
str3 == str4: false
str1.equals(str2): true
str1.equals(str3): true
str1.equals(str4): true
str3.equals(str4): true

equals能够真实判断字符串是否相等,而 == 则问题多多,谨记该用法。