Java 中的 String.equals() 方法

2025年9月1日 | 阅读 6 分钟

equals() 方法定义在 String 类中。它用于比较两个对象的**内容和区分大小写**,而不是它们的内存地址(与 == 运算符不同,后者比较引用)。这是一个快速简便的方法,用于检查两个字符串的内容是否匹配。请注意,该方法重写了 Object 类的 equals() 方法。

签名

参数:该方法接受一个对象作为参数。

返回值:如果两个字符串的字符相等,则返回 true,否则返回 false。

默认情况下,String.equals() 的行为与 == 相同,但可以在用户定义的类中重写它以进行逻辑值比较。

内部实现

示例:String.equals() 方法

示例

编译并运行

输出

true
false
false

说明

该代码使用 equals() 方法比较字符串 s1 与 s2,s1 与 s3,以及 s1 与 s4。由于两个字符串内容相同,第一次比较返回 true;但第二次比较由于两个字符串的大小写不同而返回 false。S1 和 S4 内容的差异导致第三次比较结果无效。

程序 1:在集合中使用 String.equals() 方法

示例

编译并运行

输出

ANDREW is Present

说明

在上面的 Java 代码中,我们创建了一个名为 list 的 ArrayList,其中包含许多字符串,并初始化一个名为 str1 的 String 变量,其值为“ANDREW”。然后,使用 for-each 循环遍历列表中的元素,使用 String.equals() 方法将每个条目与“ANDREW”进行比较。如果检测到匹配,程序将打印“ANDREW is Present”。该代码通过有效地检查列表中是否存在“ANDREW”并提供相应的反馈,演示了在集合中进行字符串比较时使用 String.equals() 方法。

程序 2:比较各种数据类型的引用

示例

编译并运行

输出

false
false
false
false
true
true
true
true

说明

上述 Java 程序比较了各种数据类型(如 Character、Integer、Float 和 Boolean)与 String 对象的引用。由于 equals() 方法期望相同类型 else 对象,因此比较最初返回 false。然而,在将非 String 数据类型转换为 String 后,比较正确地返回 true,这突显了在 Java 中进行精确字符串比较时数据类型兼容性的重要性。

程序 3:重写 String.equals() 方法

示例

编译并运行

输出

true
false

说明

该程序演示了如何在用户定义的类中重写 String.equals() 方法,以允许对对象内容进行逻辑比较而不是引用。Sample 类重写了 equals() 方法以比较两个 Sample 对象的 value 字段。在 main() 方法中,尽管 s1 和 s2 是不同的对象,但 s1.equals(s2) 返回 true,因为它们具有相同的值(10);而 s1.equals(s3) 返回 false,因为它们的值不同。

程序 4:使用 String.equals() 方法和 == 运算符比较字符串

示例

编译并运行

输出

false
true

说明

该程序演示了在 Java 中比较 String 对象时 == 运算符和 String.equals() 方法之间的区别。== 运算符检查 str1 和 str2 是否指向内存中的同一个对象,而它们并不指向同一个对象,因为两者都是使用 new String() 创建的,因此返回 false。

另一方面,String 类重写了 equals() 方法来比较字符串的实际内容,因此 str1.equals(str2) 返回 true,因为两个字符串都包含相同的字符序列:“Java”。

程序 5:将 String.equals() 与 null 一起使用

示例

编译并运行

输出

false
true
false

说明

该程序演示了 Java 中的 String.equals() 方法如何根据值和类型进行比较。当比较字符串“Hello”与 null 时,equals() 会安全地返回 false,而不会抛出错误。当将其与包含相同字符的另一个字符串进行比较时,它会返回 true,因为值完全匹配。

但是,当将其与整数 (100) 进行比较时,equals() 返回 false,因为数据类型不同,并且 String 不认为其他类型的对象相等,即使它们不是 null。

要记住的重要事项

  1. Null 检查:为了避免 NullPointerException,在使用 equals() 函数之前,请确保其中一个字符串不是 null。
  2. 数据类型兼容性:确保提供给 equals() 的对象是 String 类型。
  3. 区分大小写:请记住,equals() 方法是区分大小写的。

结论

Java String 类中的 **String.equals()** 方法是比较字符串内容的关键工具。它使开发人员能够确定两个字符串是否包含相同的字符,从而有助于各种字符串操作任务。通过理解其用法和注意事项,开发人员可以在其 Java 程序中有效地使用此方法。

String.equals() 方法选择题

Q1. 默认情况下,如果未重写,String.equals() 方法会比较什么?

  1. 对象引用(内存地址)
  2. 对象内容(值)
  3. 对象的哈希值
  4. 对象类名

答案: A

解释:默认情况下,Object 类中的 equals() 方法就像 == 运算符一样,比较对象引用。


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

  1. true
  2. false
  3. 编译错误
  4. 运行时异常

答案: A

解释:String 类重写了 equals() 方法来比较内容,而不是引用。由于两个字符串都包含“Java”,equals() 返回 true。


Q3. 关于重写 equals(),以下哪个陈述是正确的?

  1. 当你重写 equals() 时,你也必须重写 toString()
  2. 在所有类中重写 equals() 是强制性的
  3. 重写 equals() 允许逻辑上的内容比较对象
  4. equals() 只能比较基本类型的值

答案:C

解释:重写 equals() 方法允许开发人员定义两个对象基于其内容(而不是内存地址)“相等”的含义。


Q4. 当 String str = "Hello" 时,str.equals(100) 会返回什么?

  1. true
  2. false
  3. 编译错误
  4. 抛出 ClassCastException

答案: B

解释:equals() 方法会检查类型兼容性。由于 100 是 Integer 而不是 String,因此该方法返回 false。


Q5. 重写 equals() 方法时,理想情况下还应该重写哪个其他方法?

  1. toString()
  2. finalize()
  3. clone()
  4. hashCode()

答案: D

解释:根据 equals() 和 hashCode() 之间的约定,如果两个对象被 equals() 认为相等,那么它们必须具有相同的 hashCode()。因此,为了保持一致性,两者都应一起重写,尤其是在哈希集合中使用时。