【问题标题】:Difference between the two Java operators: != vs !equals两个 Java 运算符之间的区别:!= vs !equals
【发布时间】:2011-04-30 16:18:25
【问题描述】:

这是代码吗:

elem1!=elem2

相当于这个?

!elem1.equals(elem2)

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

【问题讨论】:

  • 这和泛型有什么关系?
  • 我才意识到什么都没有,哈哈
  • 作为一般经验法则,您不应该在除原始类型之外的任何东西上使用 == 和 != 运算符。有关解释,请参阅 Oli 和 Matti 的答案。

标签: java operators


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-09-25
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-09
      • 2011-05-24
      • 2016-05-15
      • 2016-05-18
      相关资源
      最近更新 更多