一.先说说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,Date重写后的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方法,里面只有这一个方法。

package java.lang;
import java.util.*;

public interface Comparable<T> {
    public int compareTo(T o);
}

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的区别的更多相关文章

  1. (转)Java中equals和==、hashcode的区别

    背景:学习辉哥总结的基础知识,从头来,直面短板. 1 问题引入及分析 请看下面的代码清单1 @Test public void test01() { String a = "a" ...

  2. java中equals方法和contentEquals方法区别

    java中,String类里提供了两种字符串的比较方式(算上“==”应该是三种) String line1 = new String("0123456789"); String l ...

  3. Java中equals,hashcode,==的区别

    ==  :比较java栈局部变量表中变量的地址或值是否相等. equals : 比较变量的地址在java堆中引用对象是否为同一个对象. hashcode : 通过对象在JVM内存中的存储地址通过特定算 ...

  4. java中equals,hashcode和==的区别

    https://www.cnblogs.com/kexianting/p/8508207.html

  5. java中equals和==的区别 (转)

    java中equals和==的区别  值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引 ...

  6. 【转】Java中equals和==的区别

    [转]Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boole ...

  7. 关于java中equals与==的区别的小实验

    java中equals与==经常容易混淆,简单一点说就是equals比较的是值是否相等,是一种方法,==比较的两个对象在JVM中的地址,是一种操作符. 做了几个小实验比较结果. 实验一: String ...

  8. Java中equals和hashcode的区别?

    Java中equals和hashcode方法是在Object对象中的,所以每个对象都有这两个方法,大多数时候我们为了实现特定需求需要重写这两个方法 equals和hashcode方法常用在同一个类中用 ...

  9. 深入探究Java中equals()和==的区别是什么

    目录 相等判断符"==" "=="判断基本类型数据 "=="判断引用类型数据 相等判断方法equals() 思考:为什么要设计equals( ...

随机推荐

  1. python第二天基础1-1

    一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. if 1==1: name = 'wupeiqi' print name 二.三元运算 result = 值1  ...

  2. php常用的几个模块

    上传下载.操作excel.编码.内存管理.浮点运算.系统时间.seo.web安全.网络 0.环境搭建 1.上传下载 借助jquery的uploaderfily插件.表单内嵌iframe提交 2.exc ...

  3. zabbix server配置文件

    这样的错误日志,并且在web端也没有画出图来. 解决方法: ①编辑zabbix服务器端的配置文件/etc/zabbix/zabbix_server.conf找到"Timeout"把 ...

  4. 【随机化】bzoj4080 [Wf2014]Sensor Network

    #include<cstdio> #include<algorithm> #include<cmath> using namespace std; typedef ...

  5. tomee 消息持久化

    http://tomee.apache.org/jms-resources-and-mdb-container.html http://activemq.apache.org/xml-configur ...

  6. 黑马程序员-NSDictionary和NSMutableDictionary

    NSDictionary和NSMutableDictionary:通过key和value进行对应,进行存储元素,能够方便提取所需的元素.key是不能够重复出现,但是value能够重复出现.NSDict ...

  7. 『TCP/IP详解——卷一:协议』读书笔记——15

    2013-08-25 13:39:40 第6章 ICMP:Internet控制报文协议 6.1 引言 ICMP经常被认为是IP层的一个组成部分.它传递差错报文以及其他需要注意的信息.ICMP报文同通常 ...

  8. BZOJ4170 极光(CDQ分治 或 树套树)

    传送门 BZOJ上的题目没有题面-- [样例输入] 3 5 2 4 3 Query 2 2 Modify 1 3 Query 2 2 Modify 1 2 Query 1 1 [样例输出] 2 3 3 ...

  9. MySQL数据导出

    1,打开命令行窗口“运行”-->输入CMD 2,进入自己MySQL Server安装目录的bin目录(我的安装目录如下) cd C:\Program Files\MySQL\MySQL Serv ...

  10. 在ubuntu上配置nginx+php+mysql+phpmyadmin

    1.先更新ubuntu系统 更新命令 sudo apt-get update sudo apt-get upgrade 2 添加ubuntu nginx更新源镜像 cd /etc/apt/ sudo ...