我知道,例如,在Python中,如果重新实现方法 __ cmp __ ,我正在修改==的行为。我认为同样的事情可以在Java中完成,重新实现equals(比如,当你重新实现toString,它会影响打印),但是......不,或者,我不知道如何(我在谷歌搜索它似乎那,你不能)我是对的? equals不会影响== ??如果是这样,那等于什么? 感谢
答案 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)
==
比较引用,而不是值。 ==
与对象引用的使用通常限于以下内容:
a.equals(b)
比较相等的值。因为此方法是在Object类中定义的,所以从中派生所有其他类,所以它会自动为每个类定义。但是,它不会对大多数类执行智能比较,除非该类重写它。对于大多数Java核心类,它已经以有意义的方式定义。如果没有为(用户)类定义它,它的行为与==
相同。
答案 4 :(得分:1)
无法做到。这是Java没有继承的一个C ++特性......