使用Java中的“”运算符比较两个对象

如何使用“”在Java中制作两个对象,例如

MyObject obj1= new MyObject(“blablabla”, 25); MyObject obj2= new MyObject(“nannaanana”, 17); if (obj1 > obj2) do something. 

我把MyObject类标题设为

public class MyObject<T extends Comparable> implements Comparable<MyObject>并创建了方法Comp但是我获得的所有增益现在我可以在对象列表上使用“sort”,但是如何比较两个对象直接相互? 是

 if(obj1.compareTo(obj2) > 0) do something 

唯一的办法?

您不能在Java中执行运算符重载。 这意味着您无法在自己的类中为运算符定义自定义行为,例如+><==等。

正如您已经指出的那样,实现Comparable并使用compareTo()方法可能就是这种情况。

另一个选择是创建一个Comparator (参见文档 ),特别是如果它对类实现Comparable没有意义,或者你需要以不同的方式比较来自同一个类的对象。

为了提高代码可读性,您可以将compareTo()与可能看起来更自然的自定义方法结合使用。 例如:

 boolean isGreaterThan(MyObject that) { return this.compareTo(that) > 0; } boolean isLessThan(MyObject that) { return this.compareTo(that) < 0; } 

然后你可以像这样使用它们:

 if (obj1.isGreaterThan(obj2)) { // do something } 

使用Comparable.compareTo(T)是唯一的选项(或Comparator )。 接口仅定义一个方法(当Comparator添加equals ), 并将该对象与指定的对象进行比较以获得顺序。 此外,Java不允许运算符重载(因此您将无法直接更改用于调用该方法的操作数;或者实际上修改了该接口)。

这不是唯一的方法。 您也可以实现比较器。 Comparator使用compare()方法与使用compareTo()方法的Comparable相对。

您不能使用><直接比较对象的原因是因为Java不知道您要用于比较的变量(因为对象中可能存在多个变量)。

为了比较对象,这些对象必须具有可比性。 您需要定义并告诉Java您要如何比较它们。

Java集合提供了sort方法。 然而,有些学校确实要求您编写自己的排序方法,最终仍然使用compareTo()进行比较。

你可以在这里看看ComparableComparator之间的细微差别: compare()和compareTo()有什么区别?


我认为值得一提的是,默认情况下,如果你没有覆盖compareTo()方法,Java会按字典顺序比较字符串(对象)。