如果 a 和 b 都是对象,则 a = b 会进行对象引用匹配,并且仅当两者都指向堆空间中的同一个对象时才返回 true,另一方面,a.equals(b) 用于逻辑映射及其期望对象重写此方法以提供逻辑相等性。例如,String 类重写了equals()方法,以便您可以比较两个 String,它们是不同的对象但包含相同的字母。
Java 中关于对象相等性比较的概念。详细解释一下。
-
对象引用匹配:当使用
a = b
进行对象引用匹配时,它会检查对象引用的地址是否相同,也就是它们是否指向内存中的同一个对象。如果a
和b
指向堆空间中的同一对象,则返回true
,否则返回false
。这种比较实际上是比较两个引用是否指向同一片内存空间,而不是比较对象的内容。 -
逻辑相等性比较:当使用
a.equals(b)
进行逻辑相等性比较时,它会调用对象的equals()
方法来比较两个对象的内容是否相等。通常情况下,如果没有重写equals()
方法,它会继承自Object
类,此时equals()
方法的行为与对象引用匹配相同,即只有当两个引用指向同一对象时才返回true
。然而,许多类都会重写equals()
方法以提供特定的逻辑相等性比较,例如String
类会比较两个字符串的内容是否相同,而不仅仅是比较引用是否相同。
因此,在 Java 中,使用 equals()
方法进行对象的逻辑相等性比较更为常见,特别是在比较字符串、集合、自定义对象等情况下。而使用 ==
运算符进行对象引用匹配则更多用于检查两个引用是否指向同一对象。