有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java compareTo和运算符

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

    personA < personB

代替

    personA.compareTo(personB) == -1? 

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


共 (6) 个答案

  1. # 1 楼答案

    Java中没有运算符重载。你可能来自C++背景。p>

    你必须使用compareTo方法

  2. # 2 楼答案

    这是不可能的,java不会给你操作符重载
    但一个更面向对象的选项是在person中添加一个方法

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

    因此,与其写作

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

    你可以写

    if(personA.isTallerThan(personB)){
    
    }
    

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

  3. # 3 楼答案

    不,不可能用personA < personB代替。在Java中不能重载运算符

    另外,我建议你换衣服

    personA.compareTo(personB) == -1
    

    personA.compareTo(personB) < 0
    

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

  4. # 4 楼答案

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


    1当然,内置了一些重载:+运算符适用于整型、浮点型和String型。但您不能定义自己的重载

  5. # 5 楼答案

    不可能,不可能;Java不支持操作符重载(除了内置的重载)

    顺便说一句,与其写== -1,不如写< 0compareTo只需要返回一个负/零/正值,而不是具体的-1/0/1

  6. # 6 楼答案

    不,是“<应用于对象时不会编译。此外,还要注意你的测试:

    personA.compareTo(personB)==-1
    

    API文档只是说,当对象小于指定的对象时,compareTo()返回一个负整数,不一定是-1。使用

    personA.compareTo(personB) < 0
    

    相反