当前位置: 首页 > 知识库问答 >
问题:

使用equals()比较To()?

燕刚捷
2023-03-14

测试代码(只是为了遵守SSCCE,显然有更好的方法来改变您自己的不区分大小写的数据模型)

public class TestClass implements java.lang.Comparable<TestClass> {

    public String test;

    @Override
    public int compareTo(TestClass o) {
        if (o == null) {
            throw new NullPointerException();
        }
        return equals(o) ? 0 : test.toLowerCase().compareTo(o.test.toLowerCase());
    }

    @Override
    public boolean equals(Object o) {
        return (o == this) ? true : o instanceof TestClass ? test.equalsIgnoreCase(((TestClass) o).test) : false;
    }

    @Override
    public int hashCode() {
        return test.toLowerCase().hashCode();
    }
}

比方说,我希望我的类实现可比遵循API中建议的强烈建议:

强烈建议,但不是严格要求(x.compareTo(y)==0) == ( x.equals(y))。

那么在compareTo()中使用equals()可以吗?当然,我们正在确保equals()不会调用compareTo()作为回报。

类似:什么时候包括什么?

共有1个答案

厍彭薄
2023-03-14

应该是可以的,只要你在调用equals()之前做一个NPE检查。

还有一点是在做之前

test.toLowerCase().compareTo(o.test.toLowerCase());

您还必须检查test是否为NULL,因为“someString”。compareTo((字符串)null)将抛出NullPointerException。

 类似资料:
  • 我试着比较两个物体,两个物体在每个区域上都有完全相同的值。 请注意,它们都打印相同的结果。 然而,当我比较每个对象中的字段时,和使用。等于时,返回值为false。 以下是比较数值的方法示例: 是否有其他方法可以比较和?所有其他字段在相同的equals方法中返回true(如预期)。 数字2={10,11}和字符串2={7c2cfc4e-5805-45ad-8687-4f2412a92e1d,d91b

  • 问题内容: 假设我需要使用按某些域逻辑排序的元素。通过这种逻辑,不相等的元素的顺序无关紧要,因此compare方法可以返回0,但是在这种情况下,我不能将它们放入。 所以,问题是:这样的代码有什么缺点: 更新 : 好。如果它应该永远是方法之间的一致性,并且,作为@SPFloyd - seanizer和其他人说。如果我删除接口并移入此逻辑是否会更好甚至更好(我可以在不破坏封装的情况下做到这一点)?因此

  • 问题内容: 我知道Java枚举被编译为具有私有构造函数和一堆公共静态成员的类。比较给定枚举的两个成员时,我一直使用,例如 但是,我刚遇到一些使用equals运算符==而不是.equals()的代码: 我应该使用哪个运算符? 问题答案: 两者在技术上都是正确的。如果你查看源代码,它只是顺应了。 我使用,但是,这将是null安全的。

  • 我用一个字段构造了一个类。然后创建了两个对象,并且必须使用运算符和对它们进行比较。以下是我所做的:

  • 问题内容: 我想确定Java中的某些内容:如果我有一个Character,Integer或Long以及类似的东西,我应该使用equals还是==足够? 我知道使用字符串不能保证每个唯一字符串只有一个实例,但是我不确定其他盒装类型。 我的直觉是使用equals,但我想确保自己没有浪费性能。 问题答案: 编辑:规范为装箱转换提供了 一些 保证。从5.1.7节开始: 如果装箱的值p为true,false

  • 有一个JavaBean汽车可能包含两个值:model和price。 现在假设我以这种方式重写equals()和hashcode()只检查模型: 这允许我检查arraylist是否已经包含同一型号的商品车(价格不重要),方法如下: 这是真的。没关系,因为汽车已经存在了! 但是现在我认为ArrayList不好,因为我想维护订购的项目,所以我用树集替换它,如下所示: }}); 但现在有一个问题,它返回F