Java 中的字符串比较,或者说比较两个字符串,是面试中最常被问到的问题之一。字符串比较可能会涉及到 equals()、equalsIgnoreCase() 方法、== 运算符和 compareTo 之间的区别。
本文将展示如何在 Java 编程语言中执行字符串比较(比较两个字符串)。在进入实际示例之前,让我们先了解 equals() 和 == 之间的主要区别。
- equals 方法将字符串数据与用户指定的对象数据进行比较,以检查它们是否代表相同的字符序列。简而言之,它会比较字符串的值。根据结果,它将返回布尔值 True 或 False。
- == 运算符比较一个字符串与另一个字符串的对象引用并返回结果。
如何在 Java 中执行字符串比较?
在此程序中,我们将执行字符串比较,并使用 equals 方法和 == 运算符比较两个字符串。
package FAQs;
public class StringComparison {
public static void main(String[] args) {
String str1 = "Tutorial Gateway";
String str2 = "Tutorial Gateway";
String str3 = new String("Java Programming");
String str4 = new String("Java Programming");
String str5 = new String("Tutorial Gateway");
String str6 = null;
boolean a = str1.equals(str2);
boolean b = str3.equals(str4);
boolean c = str1.equals(str5);
System.out.println("equals Method Result: str1 Equals to str2 = " + a);
System.out.println("== Result : str1 Equals to str2 = " + (str1 == str2));
System.out.println("equals Method Result: str3 Equals to str4 = " + b);
System.out.println("== Result : str3 Equals to str4 = " + (str3 == str4));
System.out.println("equals Method Result: str1 Equals to str5 = " + c);
System.out.println("== Result : str1 Equals to str5 = " + (str1 == str5));
System.out.println("== Result : Null Equals to Null = " + (null == null));
System.out.println("equals Method Result: Null Equals to Null = " + str6.equals(null));
}
}

在此 Java 字符串比较示例程序中,我们声明了三个变量 str3、str4 和 str5,并使用以下六条语句分配了相应的值。
以下语句将调用 equals 方法来比较 str1 和 str2。从上面的截图中,您会发现它返回 True,因为这是一个对象。
boolean a = str1.equals(str2);
此字符串示例将对字面量 str1 和 str2 进行比较。从上面的截图中,它返回 True,因为它们都引用内存中的同一个对象。
System.out.println("== Result : str1 Equals to str2 = " + (str1 == str2));
以下语句将对 str3 和另一个字符串 str4 进行比较。从上面的截图中,请注意。
- 第一条语句返回 True,因为 str3 和 str4 中的值相同。
- 第二条语句返回 False。尽管值相同,但 == 运算符返回 False,因为 str3 在缓存中创建了一个新对象,str4 在缓存中创建了另一个新对象。这意味着 str3 和 str4 的对象引用不同。因此,它返回 False。
boolean b = str3.equals(str4);
System.out.println("== Result : str3 Equals to str4 = " + (str3 == str4));
此 Java 字符串比较示例中的以下语句将区分字面量 str1 和对象 str5。
- 第一条语句返回 True,因为 str1 和 str5 中的值相同。
- 第二条 Java 语句返回 False。尽管值相同,但 == 运算符返回 False,因为 str1 在内存中创建了一个对象,str5 在缓存中创建了一个新对象。这意味着 str1 和 str5 的对象引用不同。因此,它返回 False。
boolean b = str1.equals(str5);
System.out.println("== Result : str1 Equals to str5 = " + (str1 == str5));
在最后一行 程序 中,我们使用 == 运算符比较空值。如果我们使用 equals 方法 来区分空值,它将抛出错误。
不区分大小写的比较
您必须使用 equalsIgnoreCase() 函数而不是 equals() 方法来比较字符串,而不考虑大小写。
如果您查看下面示例的输出。在这种情况下,equals() 方法 返回 False,而 equalsIgnoreCase() 方法返回 True,因为它不关心小写和大写字符。
public class Example {
public static void main(String[] args) {
String s1 = "Radar";
String s2 = "radar";
boolean a = s1.equals(s2);
boolean b = s1.equalsIgnoreCase(s2);
System.out.println("equals : s1 Equals to s2 = " + a);
System.out.println("equalsIgnoreCase: s1 Equals to s2 = " + b);
}
}
equals : s1 Equals to s2 = false
equalsIgnoreCase: s1 Equals to s2 = true
Java 字符串的词典比较
您还可以使用 compareTo() 方法对两个字符串执行词典比较。但是,它返回整数值 -1、1 和 0。因此,您必须使用 Else if 语句来打印适当的消息。
public class Example {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = "Hello";
int result = s1.compareTo(s2);
if (result < 0) {
System.out.println(s1 + " comes before " + s2);
} else if (result > 0) {
System.out.println(s1 + " comes after " + s2);
} else {
System.out.println(s1 + " equals " + s2);
}
}
}
Hello equals Hello
提示:对于不区分大小写的词典比较,请将 compareTo() 替换为 compareToIgnoreCase() 方法。
使用 for 循环比较两个字符串的程序
在此程序中,第一个 if 语句 检查两个字符串的长度是否相等。如果不相等,则没有必要执行比较。否则,它会进入 Else 语句。在其中,我们使用了 for 循环 来遍历字符。接下来,将 s1 中的每个字符与 s2 进行比较。如果它们不相等,则 flag = 1。在最后几行中,我们使用了 if else 语句来检查 flag 值。如果为 True,则两个字符串相等;否则,它们不相等。
public class Example {
public static void main(String[] args) {
String s1 = "Tutorial Gateway";
String s2 = "Tutorial Gateway";
int flag = 0;
if (s1.length() != s2.length()) {
flag = 1;
}
else {
for (int i = 0; i < s1.length(); i++) {
if (s1.charAt(i) != s2.charAt(i)) {
flag = 1;
break;
}
}
}
if (flag == 0) {
System.out.println("\n s1 is Equal to s2");
} else {
System.out.println("\n s1 Not Equal to s2");
}
}
}
s1 is Equal to s2