Java-compareTo和运算符

Java-compareTo和运算符,java,operators,comparable,compareto,Java,Operators,Comparable,Compareto,如果我有一个类Person,它实现了Comparable(例如,将personA.height与personB.height进行比较),是否可以使用 personA < personB 这样做有什么问题吗?或者我需要让操作员超负荷工作吗 不,不可能使用personA

如果我有一个类
Person
,它实现了
Comparable
(例如,将
personA.height
personB.height
进行比较),是否可以使用

    personA < personB

这样做有什么问题吗?或者我需要让操作员超负荷工作吗

不,不可能使用
personA
作为替代品。在Java中不能重载运算符

另外,我建议你换衣服

personA.compareTo(personB) == -1

personA.compareTo(personB)<0

你现在所拥有的可能对你的班级有用。但是,上的约定是,当
personA
小于
personB
时,它返回负值。该负值不必为-1,如果与其他类一起使用,代码可能会中断。如果有人将类的
compareTo()
方法更改为另一个(但仍然兼容)实现,它也可能会中断。

Java中没有运算符重载。你可能来自C++背景。
您必须使用
compareTo
方法。

Java没有运算符重载1,因此,是的,存在一个问题:这是不可能的



1当然,内置了一些重载:
+
运算符处理整数类型、浮点类型和
字符串。但是你不能定义你自己的;Java不支持操作符重载(除了内置的重载)


顺便说一下,您应该编写
<0
,而不是编写
=-1
compareTo
只需要返回一个负值/零值/正值,而不是具体的-1/0/1。

不,不可能使用“它,java不会给您运算符重载。
但一个更加面向对象的选项是在person中添加一个方法

public boolean isTallerThan(Person anotherPerson){
    return this.compareTo(anotherPerson) > 0;
}
因此,与其写作

if(personA.compareTo(personB) > 0){

}
你可以写

if(personA.isTallerThan(personB)){

}
IMHO更具可读性,因为它隐藏了细节,并且用域语言而不是java细节来表示

personA.compareTo(personB) < 0
public boolean isTallerThan(Person anotherPerson){
    return this.compareTo(anotherPerson) > 0;
}
if(personA.compareTo(personB) > 0){

}
if(personA.isTallerThan(personB)){

}