Java中equals()、==、compareTo()的区别

今天在写代码的时候对这个三个的区别又混了,所以根据网上的相关资料整理一下,方便以后阅读。

1、==和equals()的区别
“==”主要是两个变量值的比较,返回值为true或者false。
对于普通变量,比如

int a=10;
int b=10;
a==b;//返回是true

而对于以下的情况:

String a= new String("abc");
String b= new String("abc");
a==b;//返回false

原因如下:
对于引用数据类型,或者说是对象的比较是对对象引用的内存地址进行比较,对于new出来的2个String类型的数据a、b在内存中对应的内存地址是不一样的,所以会返回false。
“==”并不涉及对象内容的比较若是对对象的内容进行比较应该使用equals()方法,比如:

String a= new String("abc");
String b= new String("abc");
a.equals(b);//返回true

所以,总结如下:

  • “==”是对对象内存地址的比较
  • equals()是对对象内容的比较
  • 对于基本数据类型一般用“==”
  • 对于字符串的比较一般用equals()

2、compareTo()

在API中,java.lang包下面的基本数据类型的封装类都提供了该方法。

  • 在基本数据中,equals()是比较2个Character对象;
  • 在Boolean中,是boolean的实例与其它实例进行比较
  • 在String中,是按照字典顺序进行比较,返回值是一个int类型
public class Test {
    public static void main(String[] args) {
        String s1 = new String("abc");
        String s2 = new String("abc");
        System.out.println((s1==s2)?"true":"false");
        System.out.println((s1.equals(s2))?"true":"false");
        if ((s1.compareTo(s2))==0) {
            System.out.println("s1 is equal s2");
            s1=s2;//进行赋值操作
            //在上一步进行赋值操作之后,实际是s2和s1都指向了内存中的同一个位置,所以再用“==”进行判断时,因为内存地址是相同的,返回的就是true
            System.out.println((s1==s2)?"true":false);
        }
    }
}

3、equals()的覆写问题

在Java中,equals()方法多数是在开发时让我们去覆写的,可以由我们自己定义满足什么条件的2个Object是equal的。所以,我们在看时候要去看定义。
比如,String类就是覆写了equals()方法,直观比较字符是不是都相同。具体覆写的实现可以看Java为我们提供的源码。

4、compareTo()方法和compare

  • 普通的类要实现排序,就必须要实现Comparable接口,并重写compareTo()方法
  • compareTo(Object o)是java.lang.Comparable中的方法,当需要对某个类的对象进行排序时,就需要实现Comparable接口中的compareTo()方法
  • compare(Object o1,Object o2)是java.util.Comparator接口的方法,实际上用的是待比较对象的compareTo()

你可能感兴趣的:(菜鸟日记,java,equals,阅读)