0

我正在阅读以下概念interned strings

String s1 = "Hi";
String s2 = "Hi";
String s3 = new String("Hi");
System.out.println(s1 == s2); // true
System.out.println(s1 == s3); // false
System.out.println(s1.equals(s3)); //true

String 是 Java 中的一个对象,但是编译器允许我们使用字面量来分配 String 引用变量,而不是要求我们使用new运算符,因为字符串在编程中无处不在。使用文字进行赋值会创建一个interned string. 所有具有相同字面量的实习字符串都指向内存中的相同空间,因此允许使用等效运算符。

然而,这让我想知道:使用该equals()方法比较两个字符串引用变量是否更合适,因为在 Java 中字符串是对象(而不是像其他语言中的数组)并且应该使用 equals 比较对象的内容(),因为==关于对象的运算符只告诉我们它们指向内存中的同一个位置?

或者它不是更合适,因为实习字符串的概念清楚地表明,==如果一个字符串共享相同的文字,则它们只能与另一个字符串等价()?

如果它更合适,人们通常会使用这种equals()方法,还是认为它是矫枉过正?

4

1 回答 1

4

是的, equals是用来比较字符串对象内容的方法。使用 == 我们只能比较两个引用是否指向相同的内存位置。但是使用 equals 可以检查两个引用是否包含相同的字符串内容,它们是否位于相同的内存位置。从逻辑上讲,当您尝试比较两个字符串时,您必须寻找比较这些字符串的内容而不是它们的内存位置。

作为一种实践或几乎所有地方,字符串等于方法用于字符串比较,而不是 ==

于 2013-07-12T18:42:01.490 回答