使用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()
进行比较。
你可以在这里看看Comparable
与Comparator
之间的细微差别: compare()和compareTo()有什么区别?
我认为值得一提的是,默认情况下,如果你没有覆盖compareTo()
方法,Java会按字典顺序比较字符串(对象)。