Java值对象比较方法

Java值对象比较方法,java,Java,我是Java新手,正在努力学习 Java没有运算符重载,因此在编码值对象时,我知道需要将对象与重写的“equals”方法(而不是==运算符)进行比较,但我还没有阅读需要重写的其他方法。其他常用运算符的等效方法如何:>、=、和查看接口。您需要覆盖hashCode()(由所有哈希集合使用)和equals()。如果a.equals(b),则a.hashCode()应等于b.hashCode() 为了进行比较,您可以实现接口Comparable。对于此接口,您需要实现一个compareTo方法,该方法等

我是Java新手,正在努力学习


Java没有运算符重载,因此在编码值对象时,我知道需要将对象与重写的“equals”方法(而不是==运算符)进行比较,但我还没有阅读需要重写的其他方法。其他常用运算符的等效方法如何:>、=、和查看接口。

您需要覆盖
hashCode()
(由所有哈希集合使用)和
equals()
。如果
a.equals(b)
,则
a.hashCode()
应等于
b.hashCode()


为了进行比较,您可以实现接口
Comparable
。对于此接口,您需要实现一个
compareTo
方法,该方法等效于(注意
a.compareTo(b)==0
并不意味着或要求
a.equals(b)
!)。实现
Comparable
是可选的,并且仅当您对排序或某些基于顺序的集合(如java中的
TreeSet

)感兴趣时才有用,该接口正是为此而设计的。对于“规范示例”,请查看
java.lang.Integer
类,并查看
equals()
hashCode()
compareTo()
的实现。另外,在
java.lang.Object
java.lang.Comparable
中查看这些方法可用的JavaDoc信息。您还可以实现
比较器
来比较相同类型的每两个对象是否相等。因此>=应该是:(obj1.compareTo(obj2)>-1)?是否也有需要执行算术运算(可添加、可倍增等)的值对象接口?@limscoder恐怕没有这样的接口。您可以实现
comparable
来比较等式。您需要这些接口做什么?@doctrey我可以给出许多Python(我当前选择的语言)中重载运算符算术的示例:日期、小数(固定精度数字对象)、ORM操作(ORM.update(obj.attr+5)例如,Kent Beck的TDD书的前半部分介绍了如何开发“Currency”值对象。当然,您希望能够对货币对象执行算术运算,因此如果没有显式接口,则必须有一个标准的命名约定,“add”表示+,“times”表示*,等等。您可以简单地添加add()等方法,multiply()等。如果要使用运算符重载,恐怕需要使用另一种语言。我个人希望他们也将其添加到Java中。对于>=,我将使用obj1.compareTo(obj2)>=0而不是>-1,只是为了更清楚。