这段代码是:
elem1!=elem2
等同于这一个?
!elem1.equals(elem2)
它可以双向编译,但我仍不确定...
==
(以及扩展的!=
)检查对象标识,即这两个对象是否引用同一个实例。equals
检查更高级别的标识概念,通常是对象的“值”是否相等。这意味着由实现equals
的人决定它的含义,因此它们不是相同的东西。
这两者不同的一个常见例子是字符串,其中两个不同的实例可能具有相同的内容(相同的字符串),在这种情况下,==
比较为false,但equals
返回true。
equals
的默认实现(在Object
上)内部使用==
,因此对于未覆盖equals
的对象,结果将相同(当然除了null)。
elem1
和elem2
是否是指向同一对象的引用(假设它们不是原始类型)。第二个版本调用类型特定的方法来检查两个(可能不同的)对象在某种意义上是否“相等”(通常,这只是检查它们的所有成员字段是否相同)。我认为这与泛型没有关系。