两个Java运算符之间的区别:!= vs!equals

时间:2011-04-30 16:18:25

标签: java operators

这是代码:

elem1!=elem2

相当于这一个?

!elem1.equals(elem2)

它汇编了两种方式,但我仍然不确定...

2 个答案:

答案 0 :(得分:8)

==(以及扩展名!=)检查对象标识,即两个对象是否引用同一个实例。 equals检查更高级别的身份概念,通常是对象的“值”是否相等。这意味着什么取决于在该特定对象上实现equals的人。因此它们不是一回事。

这两个不相同的常见示例是字符串,其中两个不同的实例可能具有相同的内容(相同的字符串),在这种情况下,==比较为false但{{1返回true。

equals的默认实现(在equals上)内部使用Object,因此对于不覆盖==的对象的结果将是相同的(不包括空值,当然)

答案 1 :(得分:7)

一般情况下,他们不一样。第一个版本检查elem1elem2是否是对同一对象的引用(假设它们不是基本类型)。在某种意义上,第二个版本调用特定于类型的方法来检查两个(可能是不同的)对象是否“相等”(通常,这只是检查它们的所有成员字段是否相同)。

我认为这与仿制药没有任何关系。