这是代码:
elem1!=elem2
相当于这一个?
!elem1.equals(elem2)
它汇编了两种方式,但我仍然不确定...
答案 0 :(得分:8)
==
(以及扩展名!=
)检查对象标识,即两个对象是否引用同一个实例。 equals
检查更高级别的身份概念,通常是对象的“值”是否相等。这意味着什么取决于在该特定对象上实现equals
的人。因此它们不是一回事。
这两个不相同的常见示例是字符串,其中两个不同的实例可能具有相同的内容(相同的字符串),在这种情况下,==
比较为false但{{1返回true。
equals
的默认实现(在equals
上)内部使用Object
,因此对于不覆盖==
的对象的结果将是相同的(不包括空值,当然)
答案 1 :(得分:7)
一般情况下,他们不一样。第一个版本检查elem1
和elem2
是否是对同一对象的引用(假设它们不是基本类型)。在某种意义上,第二个版本调用特定于类型的方法来检查两个(可能是不同的)对象是否“相等”(通常,这只是检查它们的所有成员字段是否相同)。
我认为这与仿制药没有任何关系。