Java重新实现==

时间:2010-12-13 22:21:41

标签: java class equals

我知道,例如,在Python中,如果重新实现方法 __ cmp __ ,我正在修改==的行为。我认为同样的事情可以在Java中完成,重新实现equals(比如,当你重新实现toString,它会影响打印),但是......不,或者,我不知道如何(我在谷歌搜索它似乎那,你不能)我是对的? equals不会影响== ??如果是这样,那等于什么? 感谢

5 个答案:

答案 0 :(得分:6)

Python的==运算符与Java中的.equals()运算符相同。您可以使用Python中的.__cmp__()和Java中的.equals()来覆盖它。

Python的is运算符与Java中的==运算符相同,并且都不能覆盖这些运算符。

答案 1 :(得分:5)

运算符==比较对象引用是否相等。 equals方法用于执行 value 比较 - 例如,如果您使用{{1},则表示相同字符序列的两个不同String对象将比较相等},但是如果你使用equals则没有。

据我所知,运算符重载在Java语言设计方面被排除在外。 (为什么语言设计者在==超过+的重载中构建了我的想法。方便,是的,但IMO是在作弊。)

答案 2 :(得分:3)

==是比较器

.equals()是一种方法

equals的需求是因为比较对象并不像进行简单比较那样直接。

如果你说object1 == object2

然后,只有当它们指向相同的存储空间时(即它们引用SAME对象),结果才为真。

但是,如果要检查属性,甚至是对象属性的子集是否相同,那么您将实现自己的equals方法,并指定两个对象相等的构成。

所以,答案是,你认为什么是平等的?

  • 在内存中引用同一对象的两个对象?然后使用==
  • 或包含相同数据的两个对象。然后使用.equals()

答案 3 :(得分:1)

==比较引用,而不是值。 ==与对象引用的使用通常限于以下内容:

  1. 比较是否有引用 空。
  2. 比较两个枚举值。这是有效的,因为只有一个 每个枚举常量的对象。
  3. 您想知道两个引用是否属于同一个对象
  4. a.equals(b)比较相等的值。因为此方法是在Object类中定义的,所以从中派生所有其他类,所以它会自动为每个类定义。但是,它不会对大多数类执行智能比较,除非该类重写它。对于大多数Java核心类,它已经以有意义的方式定义。如果没有为(用户)类定义它,它的行为与==相同。

答案 4 :(得分:1)

无法做到。这是Java没有继承的一个C ++特性......