-6

可能重复:
如何比较 Java 中的字符串?

class StringTest {
public static void main(String[] args) {
String str1 = "Hi there";
String str2 = new String("Hi there");
System.out.println(str1 == str2);
System.out.println(str1.equals(str2));
}

输出出来了:

                          False
                          true  

为什么即使 str1 和 str2 看起来相等,第一个输出也是假的?

4

5 回答 5

6

==比较变量的内容。(您对此非常了解intA == intB。)

String变量包含对对象的引用String,因此==将比较引用。

String str1 = "Hi there";
String str2 = new String("Hi there");

str1并将str2引用不同的字符串对象,因此包含不同的引用,因此str1 == str2将 yield false

str1.equals(str2)另一方面,将比较str1str2所指的对象,正如您所指出的那样,产生true.

于 2012-07-24T12:40:01.693 回答
1

因为如果你使用new操作符,它会在内存中创建一个新的引用。

== 比较两个不同对象的引用。

使用 equals 比较内容。

于 2012-07-24T12:41:43.940 回答
0

作为 aioobe 答案的补充:您实际上应该使用 equals 方法比较对象。对象上的 == 运算符将比较两个对象的引用是否指向相同的内存地址。

于 2012-07-24T12:41:10.097 回答
0

==比较object reference contentsiestr1str2not object contentswhileequals()比较object contentsie(objects pointed by str1 and str2)

还要检查这个:

String str1 = "Hi there";
String str3 = "Hi there";

str1 == str3 => 真

这是因为 JVM 以不同的方式处理字符串文字。在这里检查

于 2012-07-24T12:41:32.723 回答
0

在 java 中,当您使用new关键字创建对象时,它们会在某个位置的堆中创建。

即使您str3使用newthen 创建第三个引用变量,如果将引用与str2

String str1 = "Hi there";
String str2 = new String("Hi there");
String str3 = new String("Hi there");

 str2==str3 gives you false

因此,当您使用 scompare的值而不是.objectequalsreference

于 2012-07-24T12:45:08.720 回答