Java 字符串比较

2025年3月22日 | 阅读 5 分钟

字符串比较是 Java 编程的关键组成部分,广泛用于引用匹配、排序和身份验证。在本节中,我们将讨论比较 Java 中字符串的各种方法。

我们可以根据内容和引用来比较 Java 中的字符串。

Java String compare

字符串比较用于身份验证(通过 equals() 方法)、排序(通过 compareTo() 方法)、引用匹配(通过 == 运算符)等。

Java 中有三种比较字符串的方法

  1. 使用 equals() 方法
  2. 使用 == 运算符
  3. 使用 compareTo() 方法
  4. 使用 startsWith() 和 endsWith() 方法

1) 使用 equals() 方法

String 类的 equals() 方法比较字符串的原始内容。它比较字符串的值是否相等。String 类提供了以下两种方法:此外,equalsIgnoreCase() 方法执行不区分大小写的比较。

String 类提供了以下两种方法

  • public boolean equals(Object another) 比较此字符串与指定的对象。
  • public boolean equalsIgnoreCase(String another) 比较此字符串与另一个字符串,忽略大小写。
Java String compare

StringComparisonUsingEqualsMethod.java

输出

true
true
false

说明

S1 和 S2 指向相同的字符串池对象,因为它们是字符串字面量。因此,s1.equals(s2) 返回 true。尽管 S3 是使用 new 关键字创建的,但 S1 和 S3 的内容相同。由于 equals() 方法只比较内容,所以 s1.equals(s3) 返回 true;然而,s1.equals(s4) 返回 false,因为 s1 和 s4 的内容不同。

在上面的程序中,使用了String类的equals()方法。如果 String 对象匹配且两个字符串的大小写相同,则equals()方法返回 true。equalsIgnoreCase()方法返回 true,而不管字符串的大小写。

StringComparisonUsingequalsIgnoreCase.java

输出

false
true

说明

有两个字符串 s1 和 s2,它们的大小写不同(“Ram”和“rAm”)。

使用 equals() 函数比较 s1 和 s2。由于大小写不同,此方法会区分大小写地进行比较并返回 false。

使用 equalsIgnoreCase() 函数对字符串 s1 和 s2 进行比较。由于它平等对待内容并忽略大小写差异,因此此函数返回 true。

2) 使用 == 运算符

在 Java 中,== 运算符比较的是引用而不是值。

Java String compare

StringCompare.java

输出

true
false

3) 使用 compareTo() 方法进行字符串比较

String 类的 compareTo() 方法按字典顺序比较值,并返回一个整数值,该值描述第一个字符串是否小于、等于或大于第二个字符串。

假设 s1 和 s2 是两个 String 对象。如果

  • s1 == s2 :该方法返回 0。
  • s1 > s2 :该方法返回一个正值。
  • s1 < s2 :该方法返回一个负值。

StringComparisonUsingComapreto.java

输出

0
1
-1

说明

str1 和 str2 的内容相同——“Sachin”,而 str3 包含单词“Ratan”。

4) 使用 startsWith() 和 endsWith() 方法

如果一个字符串分别以某个前缀开头和以某个后缀结尾,可以使用 startsWith() 和 endsWith() 方法来确定。

输出

true
true

说明

如果字符串以给定前缀开头,则 startsWith("Hello") 返回 true。

如果字符串确实以指定的后缀结尾,则 endsWith("World!") 返回 true。

结论

总而言之,compareTo() 函数提供了一种根据字典顺序比较字符串的方法。通过理解返回值(0、正数或负数),开发人员可以确定两个字符串之间的排序关系。示例展示了该方法在各种字符串输入下的行为。


Java 中的字符串比较 MCQ

1. 在 Java 中比较字符串时,以下关于 equals() 方法和 == 运算符的说法哪个是正确的?

  1. equals() 比较字符串的引用,而 == 比较字符串的内容。
  2. equals() 和 == 都比较字符串的内容。
  3. equals() 比较字符串的内容,而 == 比较引用。
  4. equals() 和 == 都比较字符串的引用。

答案:C)

解释: equals() 方法用于比较两个字符串对象内容的相等性,而 == 运算符检查两个引用是否指向内存中的同一个对象。


2. 以下代码的执行结果是什么?

  1. false, true, false
  2. true, false, true
  3. false, true, true
  4. true, true, false

答案:C)

解释: s1 == s2 为 false,因为 s1 和 s2 指向不同的对象。s1.equals(s2) 为 true,因为它们的内容相同。s1 == s3 为 true,因为 s1 和 s3 都指向字符串池中的同一个字符串字面量。


3. 以下代码的输出是什么?

  1. 0
  2. 正整数
  3. 负整数
  4. 编译错误

答案:B)

解释: compareTo() 方法按字典顺序比较字符串。由于大写 'J' 的 Unicode 值小于小写 'j',因此 s1.compareTo(s2) 返回一个正整数。


4. 在 Java 中,应该使用哪种方法来执行不区分大小写的字符串比较?

  1. compareTo()
  2. equalsIgnoreCase()
  3. compareToIgnoreCase()
  4. equals()

答案:B)

解释: equalsIgnoreCase() 方法比较两个字符串,忽略大小写的差异。这适用于不区分大小写的相等性检查。


5. 下列代码的输出是什么?

  1. false, false, true
  2. false, true, false
  3. true, true, true
  4. true, false, false

答案:B)

解释: s1.equals(s2) 为 false,因为大小写不同。s1.equalsIgnoreCase(s2) 为 true,因为它忽略了大小写的差异。s1 == s3 为 false,因为 s1 和 s3 指向不同的对象,尽管它们的内容相同。