如果你和我一样,当我第一次开始使用 Java 时,我想使用“==”运算符来测试两个 String 实例是否相等,但无论好坏,这都不是正确的方法在 Java 中。
在本教程中,我将演示几种正确比较 Java 字符串的不同方法,从我大部分时间使用的方法开始。在本 Java 字符串比较教程的最后,我还将讨论为什么“==”运算符在比较 Java 字符串时不起作用。
选项 1:Java 字符串与 equals 方法的比较
大多数时候(可能是 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 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(), and compare()