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

blu*_*llu 4 java operators

这段代码是:

elem1!=elem2
Run Code Online (Sandbox Code Playgroud)

相当于这一个?

!elem1.equals(elem2)
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*nen 8

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

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

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


Oli*_*rth 7

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

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