美文网首页
== 与equals的区别

== 与equals的区别

作者: QM | 来源:发表于2017-03-31 16:01 被阅读0次

== 与equals的主要区别是 == 常用于比较原生类型,而equals()方法用于检查对象的相等性。另一个不同的点是:如果== 和equals()用于比较对象,当两个引用地址相同,== 返回true。而equals()可以返回true或者false主要取决于重写实现。最常见的一个例子,字符串的比较,不同情况==和equals()返回不同的结果。equals()方法最重要的一点是,能够根据业务要求去重写,按照自定义规则去判断两个对象是否相等。重写equals()方法的时候,要注意一下hashCode是否会因为对象的属性改变而改变,否则在使用散列集合储存该对象的时候会碰到坑!!理解equals()方法的存在是很重要的。

  1. 使用==比较有两种情况:

比较基础数据类型(Java中基础数据类型包括八中:short,int,long,float,double,char,byte,boolen):这种情况下,==比较的是他们的值是否相等。
引用间的比较:在这种情况下,==比较的是他们在内存中的地址,也就是说,除非引用指向的是同一个new出来的对象,此时他们使用 ==去比较得到true,否则,得到false。

  1. 使用equals进行比较:

equals追根溯源,是Object类中的一个方法,在该类中,equals的实现也仅仅只是比较两个对象的内存地址是否相等,但在一些子类中,如:String、Integer 等,该方法将被重写。

  1. 以String类为例子说明equals与==的区别

在开始这个例子之前,同学们需要知道JVM处理String的一些特性。Java的虚拟机在内存中开辟出一块单独的区域,用来存储字符串对象,这块内存区域被称为字符串缓冲池。当使用 String a = "abc"这样的语句进行定义一个引用的时候,首先会在字符串缓冲池中查找是否已经相同的对象,如果存在,那么就直接将这个对象的引用返回给a,如果不存在,则需要新建一个值为"abc"的对象,再将新的引用返回a。String a = new String("abc");这样的语句明确告诉JVM想要产生一个新的String对象,并且值为"abc",于是就在堆内存中的某一个小角落开辟了一个新的String对象。

  • ==在比较引用的情况下,会去比较两个引用的内存地址是否相等。
    String str1 = "abc";
    String str2 = "abc";
    
    System.out.println(str1 == str2);
    System.out.println(str1.equals(str2));
    
    String str2 = new String("abc");
    System.out.println(str1 == str2);
    System.out.println(str1.equals(str2));
    
以上代码将会输出
true
true
false
true
**第一个true:**因为在str2赋值之前,str1的赋值操作就已经在内存中创建了一个值为"abc"的对象了,然后str2将会与str1指向相同的地址。
**第二个true:**因为`String`已经重写了`equals`方法:为了方便大家阅读我贴出来,并且在注释用进行分析:
public boolean equals(Object anObject) {
    //如果比较的对象与自身内存地址相等的话
    //就说明他两指向的是同一个对象
    //所以此时equals的返回值跟==的结果是一样的。
    if (this == anObject) {
        return true;
    }
    //当比较的对象与自身的内存地址不相等,并且
    //比较的对象是String类型的时候
    //将会执行这个分支
    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;
            //在这里循环遍历两个String中的char
            while (n-- != 0) {
                //只要有一个不相等,那么就会返回false
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}
    
进行以上分析之后,就不难理解第一段代码中的实例程序输出了。

总结:

  1. 使用 == 比较原生类型如:boolean、int、char等等,使用equals()比较对象。
  2. == 返回true如果两个引用指向相同的对象,equals()的返回结果依赖于具体业务实现
  3. 字符串的对比使用equals()代替 == 操作符

以上就是关于equals方法和==操作符的区别,其主要的不同是一个是操作符,一个是方法,==用于对比原生类型而equals()方法比较对象的相等性。

相关文章

  • Java 拆箱与装箱

    本文知识点 基本类型与引用类型 == 与 equals() 的区别 equals() 和 hashCode 的关系...

  • "=="与equals区别

    "=="当比较的是基本数据类型,比较的是值当比较的是引用类型,比较的是地址 a.equals(b)一般情况下,比较...

  • “==”与equals区别

    “==”比较地址 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equa...

  • Java字符串

    一、常用方法String str=""; 二、==与equals的区别 ==比较的是内存地址 equals比较的是...

  • Object,String,StringBuffer,Math,

    1,Object类.Equals方法 2,String类的创建方式以及==与Equals的区别 3,字符串

  • ==与equals()的区别

    1、如果比较的是常量,则 == 与 equals() 都是比较值知否相当2、如果是对象间的比较,== 比较对象在堆...

  • ==与equals的区别

    https://www.cnblogs.com/chris-oil/p/7253264.html

  • equals与==的区别

    ==: 1.基本类型比较用==比较的是存储的数值的大小; 2.引用类型比较用==比较的是引用类型的变量所指向的对象...

  • == 与 equals的区别

    引入 == - 基本数据类型(也称原始数据类型) byte, short, char, int long, flo...

  • equals()与==的区别

    1.下图的问题? false,true。==比较的是str1和str2两个对象的地址。 equals则是比较的是两...

网友评论

      本文标题:== 与equals的区别

      本文链接:https://www.haomeiwen.com/subject/jlsvottx.html