2011-04-30 83 views
4

这是代码::!= VS等于

elem1!=elem2 

相当于这一个?

!elem1.equals(elem2) 

它编译两种方式,但我仍然不能确定它...

+10

这是什么都与仿制药做对象? – 2011-04-30 16:23:06

+0

我刚刚意识到没有什么大声笑 – bluehallu 2011-04-30 16:46:00

+0

作为一般的经验法则,除了基本类型之外,不应该对任何东西使用==和!=运算符。请参阅Oli's和M​​atti的解答。 – 2011-04-30 16:49:01

回答

8

==(和扩展!=)检查对象标识,也就是说,如果两个对象引用了相同的实例。 equals检查更高级别的身份概念,通常是否对象的“值”是相等的。这意味着什么对于该特定对象实施equals的人。所以他们不是一回事。

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

equals(上Object)的默认实现使用==里面,这样的结果都是一样的不覆盖equals(不包括空值,当然)

7

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

我不认为这与泛型有任何关系。