Java 中的字符串比较

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));
	}
}
String Comparison in Java 1

在此 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