关于Java等于运算符的用法

时间:2012-07-24 12:38:54

标签: java

  

可能重复:
  How do I compare strings in 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看起来相等,第一个输出也是假的?

5 个答案:

答案 0 :(得分:6)

==比较变量的内容。 (你很清楚intA == intB。)

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

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

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

另一方面,

str1.equals(str2)会比较str1str2所指的对象,正如您所指出的那样,它会产生true

答案 1 :(得分:1)

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

  

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

     

使用equals比较内容。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

==比较object reference contentsstr1str2而非object contents,而equals()确实比较object contents,即{{1} }}

同时检查:

(objects pointed by str1 and str2)
  

str1 == str3 =>真

这是因为JVM以不同的方式处理字符串文字。查看here

答案 4 :(得分:0)

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

即使您使用str3创建第三个引用变量new,如果与str2进行比较引用,它也会给您错误

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

 str2==str3 gives you false

因此,当您compare object的值使用equals而不是reference时。