码迷,mamicode.com
首页 > 编程语言 > 详细

Java中equals与==和comparaTo的区别

时间:2016-08-22 23:08:29      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

一.先说说Java中equals和==的区别:


Java中的数据类型,可分为两类:

  1.基本数据类型(也叫原始数据类型)

    八大基本数据类型 char byte short int long double float boolean

  2.引用数据类型(也就复合数据类型)除了上面的8个,其他都是引用数据类型

 

区别:

  基本数据类型比较只能用==,不能用equals,因为用equals(参数),参数必须为对象。

      他们之间的比较,比较的是他们的值。

public class Test {
    public static void main(String[] args) {
        int a = 1;
        int b = 1;
        System.out.println(a == b);
    }
}

  当引用类型用(==)进行比较的时候
  比较的是他们在内存中的存放地址,除非地址一样,否则比较后结果为false。

public class Test {
    public static void main(String[] args) {
        A a1 = new A();
        A a2 = new A();
        System.out.println(a1 == a2);// false
        A a3 = a1;
        System.out.println(a1 == a3);//true
    }
}

class A {

}

  Java当中所有的类都是继承于Object这个基类的,equals的方法在在Object中定义,这个方法的初始行为是比较对象的内存地址(如上面的例子),因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟用双等号(==)的结果相同。

Object里面的equals方法:

    public boolean equals(Object obj) {
        return (this == obj);
    }

  但是一些类中这个方法被重写了,如String,Integer,重写后的equals不再是比较对象在内存的存放地址了,而是比较的内容。

以String为例,equals方法代码为:

  public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

举个例子:

public class Test {
    public static void main(String[] args) {

        Integer a = new Integer(1);
        Integer b = new Integer(1);
        System.out.println(a.equals(b));// true

        String s1 = new String("abc");
        String s2 = new String("abc");
        System.out.println(s1.equals(s2));// true
    }
}

    上面的例子仅仅是纯比较而言的,如果中间加入其它代码,还是可以改变的。

 

二.比较String中comparaTo和equals的区别

    只有实现了Comparable的类才有comparaTo方法,String实现了Comparable接口的类,所以compareTo为String的方法。

public class Test {
public static void main(String[] args) {
  String s1 = new String("abc");
  String s2 = new String("abc");
  System.out.println(s1.equals(s2));// true
  System.out.println(s1.compareTo(s2));// 0

  String s3 = new String("abc");
  String s4 = new String("abca");
  String s5 = new String("abcde");
  String s6 = new String("abcd");


  System.out.println(s3.compareTo(s4));// -1
  System.out.println(s5.compareTo(s6));// 1


  System.out.println(s5.compareTo(s4));// 3
  System.out.println(s4.compareTo(s5));// -3
}
}

 区别: 

     通常compareTo用来比较大小的 而equals是比较是否相等的。

    同比之下,equals的效率高,因为compareTo是按字典顺序比较两个字符串。也就是按顺序比较字符串中各个字符的 Unicode值。

   compareTo时:

    当相同时:返回int 0;当小于时,如果此位为空,则返回-1,否则返回Unicode差值,当大于时,如果参数对应位为空,则为1,否则为差值。

Java中equals与==和comparaTo的区别

标签:

原文地址:http://www.cnblogs.com/greatfish/p/5797254.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!