java中的equals和==

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中的equals和==相关的知识,希望对你有一定的参考价值。

下面是我看别人博客和java API总结的

首先得明确一个概念就是:

  == 的用法   ==比较对象在内存中的地址是否相等。如是两个变量比较则比较的是这两个变量值是否相等,若是比较两个引用型变量则比较的是对象存储的地址是否相同,即栈中的内容是否相同,(对象存储在堆中,而对象的引用是存储在栈中)(这些必须先明确,否则后面的源码分析就不好理解)

   equals的用法    equals比较的是对象之间内容是否相同。

 先看java中的Object抽象类对equals()方法的定义:

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

这是对传入的对象进行== 比较,因为是引用类型,所以比较的是地址。所以在Object类中的equals是比较两个对象的应用地址是否相同(后面我们将要讲到的String类型的equals()方法就不是这样了,因为它重写了equals()方法!)

我们看String类中对equals()方法的定义:

public boolean equals(Object anObject) {  
    if (this == anObject) {  // 如果是相同的对象  
       return true;  
    }  
    if (anObject instanceof String) {   //不是相同对象就比较内容  
       String anotherString = (String)anObject;  
       int n = count;  
       if (n == anotherString.count) {  
            char v1[] = value;  
            char v2[] = anotherString.value;  
            int i = offset;  
            int j = anotherString.offset;  
            while (n-- != 0) {  
                if (v1[i++] != v2[j++])  
                return false;  
            }  
            return true;  
       }  
    }  
    return false;  
}  

所以对String的equals()方法是比较当前字符串与传进来的字符串是否相同

以上是关于java中的equals和==的主要内容,如果未能解决你的问题,请参考以下文章

java中的equals和==

跟王老师学集合Java中hashCode方法与equals方法的用法

Java学习笔记之二十九Java中的"equals"和"=="的用法及区别

JAVA中的equals()

java中equals使用方法

java中equals和equalsignorecase的区别