到目前为止,我一直在程序中使用==运算符来比较所有的字符串。 然而,我遇到了一个错误,将其中一个改为.equals(),它修复了这个错误。

==不好吗?什么时候应该使用,什么时候不应该使用?有什么不同?


当前回答

==比较对象的引用值,而java.lang.String类中的equals()方法比较String对象的内容(与另一个对象)。

其他回答

在Java中,当使用==运算符比较两个对象时,它会检查两个对象是否指向内存中的相同位置。换句话说,它检查两个对象名称是否基本上引用了相同的内存位置。

Java String类实际上重写了Object类中的默认equals()实现——它重写了该方法,以便它只检查字符串的值,而不检查它们在内存中的位置。 这意味着如果调用equals()方法来比较两个String对象,那么只要实际的字符序列相等,两个对象就被认为是相等的。

==操作符检查两个字符串是否完全相同的对象。

equals()方法检查两个字符串是否具有相同的值。

我认为当你定义一个字符串时,你就定义了一个对象。所以你需要使用。equals()。当你使用基本数据类型时,你可以使用==,但对于String(和任何对象),你必须使用.equals()。

您还可以使用compareTo()方法来比较两个string。如果compareTo结果为0,则两个字符串相等,否则被比较的字符串不相等。

==比较引用,不比较实际字符串。如果你确实使用new string (somestring).intern()创建了每个字符串,那么你可以使用==操作符来比较两个字符串,否则只能使用equals()或compareTo方法。

如果你像我一样,当我第一次开始使用Java时,我想使用“==”操作符来测试两个String实例是否相等,但无论如何,这不是在Java中正确的方法。

在本教程中,我将演示几种不同的正确比较Java字符串的方法,从我最常用的方法开始。在本Java字符串比较教程的最后,我还将讨论为什么“==”操作符在比较Java字符串时不起作用。

选项1:使用equals方法进行Java字符串比较 大多数时候(可能是95%的时间),我用Java String类的equals方法比较字符串,像这样:

if (string1.equals(string2))

String equals方法查看两个Java字符串,如果它们包含完全相同的字符串,则认为它们相等。

看一下一个使用equals方法的快速字符串比较示例,如果运行下面的测试,两个字符串不会被认为是相等的,因为字符不完全相同(字符的大小写不同):

String string1 = "foo";
String string2 = "FOO";

if (string1.equals(string2))
{
    // this line will not print because the
    // java string equals method returns false:
    System.out.println("The two strings are the same.")
}

但是,当两个字符串包含完全相同的字符串时,equals方法将返回true,如下例所示:

String string1 = "foo";
String string2 = "foo";

// test for equality with the java string equals method
if (string1.equals(string2))
{
    // this line WILL print
    System.out.println("The two strings are the same.")
}

选项2:使用equalsIgnoreCase方法进行字符串比较

在一些字符串比较测试中,您可能希望忽略字符串是大写还是小写。当你想以这种不区分大小写的方式测试字符串是否相等时,使用String类的equalsIgnoreCase方法,如下所示:

String string1 = "foo";
String string2 = "FOO";

 // java string compare while ignoring case
 if (string1.equalsIgnoreCase(string2))
 {
     // this line WILL print
     System.out.println("Ignoring case, the two strings are the same.")
 }

选项3:使用compareTo方法进行Java字符串比较

还有第三种比较Java字符串的不太常见的方法,那就是使用String类的compareTo方法。如果两个字符串完全相同,compareTo方法将返回0(零)的值。下面是这个String比较方法的一个快速示例:

String string1 = "foo bar";
String string2 = "foo bar";

// java string compare example
if (string1.compareTo(string2) == 0)
{
    // this line WILL print
    System.out.println("The two strings are the same.")
}

当我在写Java中的这个相等概念时,有一点很重要:Java语言在基本Java Object类中包含了一个equals方法。每当您创建自己的对象,并且希望提供一种方法来查看对象的两个实例是否“相等”时,您应该在类中重写(并实现)这个equals方法(与Java语言在String equals方法中提供这种相等/比较行为的方式相同)。

你可能想看一下==,.equals(), compareTo()和compare()

==操作符检查两个引用是否指向同一个对象。.equals()检查实际的字符串内容(值)。

注意.equals()方法属于类Object(所有类的超类)。您需要根据您的类需求重写它,但是对于String,它已经实现了,并且它检查两个字符串是否具有相同的值。

Case 1 String s1 = "Stack Overflow"; String s2 = "Stack Overflow"; s1 == s2; //true s1.equals(s2); //true Reason: String literals created without null are stored in the String pool in the permgen area of heap. So both s1 and s2 point to same object in the pool. Case 2 String s1 = new String("Stack Overflow"); String s2 = new String("Stack Overflow"); s1 == s2; //false s1.equals(s2); //true Reason: If you create a String object using the new keyword a separate space is allocated to it on the heap.