浅谈Java compareTo()和equals()

浅谈Java compareTo()和equals()

1、字符串
"str".equals((String)null)			// 返回false
"foo".compareTo((String)null) == 0	// NullPointerException

equals将把任何Object作为参数,但是compareTo只会使用Strings。

equals只会告诉你它们是否相等,但compareTo给出了String如何按照字典顺序进行比较的信息。

2、源码
public boolean equals(Object obj) {
    return (this == obj);
}
public int compareTo(String anotherString) {
    byte v1[] = value;
    byte v2[] = anotherString.value;
    if (coder() == anotherString.coder()) {
        return isLatin1() ? StringLatin1.compareTo(v1, v2)
                          : StringUTF16.compareTo(v1, v2);
    }
    return isLatin1() ? StringLatin1.compareToUTF16(v1, v2)
                      : StringUTF16.compareToLatin1(v1, v2);
 }
3、总结
  • 对于equals方法,是属于顶级类Object类的一个方法

  • 对于compareTo方法,它是接口Comparable接口的一个方法;除此之外,还有另一个接口Comparator,里面含有一个方法compare(T a, T b)

  • compareTo()方法属于接口Comparable,因此不是所有的类都拥有该方法,因为有些类根本不具有比较大小的属性;

  • compareTo()的参数不能为null;而equals()的参数可以是null,返回值false;

  • 在实现Comparable接口的compareTo方法时,强烈推荐与equals的结果一致,否则可能会出现一些奇怪的错误;因为有些类是利用equals来判断重复性,
    而有些类是利用自然顺序x.compareTo(y) == 0来判断,官方文档强烈推荐:(x.compareTo(y)==0) == (x.equals(y));

  • 一般来说,建议使用"abc".equals(str),这样即使str为空也不会报错。

方法说明
a.equals(b)比较 对象ab是否逻辑相等(可以是==比较),但是也可以重写自定义相等的含义
a == b操作符,比较俩引用引用的对象是否物理上是同一个对象
a.compareTo(b)比较对象ab的自然顺序
compare(a, b)a.compareTo(b)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值