equals()和==的区分

Posted 赵庆-BUPT

tags:

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

1.==是一个操作符,用于比较两个引用的值是否相等。

2.equals()是Object中的一个方法,默认实现如下。可以看到,在Object中,equals()方法与==操作符的效果相同。

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

2.1 equals()的重写版本

由于Object是java所有类的父类,所以java类均可以根据需要重写equals()方法。

因此,需要特别注意的是:不同的对象或者类,其equals()方法的实现可能是不同的。

2.1.1 String类中equals()的重写版本

 1 public boolean equals(Object anObject) {
 2         if (this == anObject) {//如果两个引用相等,则直接返回true;
 3             return true;
 4         }
 5         if (anObject instanceof String) {//如果传入的对象是String类型,则比较两个String的值。值相等,则返回true;
 6             String anotherString = (String) anObject;
 7             int n = value.length;//value是String类中的一个私有变量,是一个char数组,用于存储该String实例的字符。
 8             if (n == anotherString.value.length) {
 9                 char v1[] = value;
10                 char v2[] = anotherString.value;
11                 int i = 0;
12                 while (n-- != 0) {
13                     if (v1[i] != v2[i])
14                             return false;
15                     i++;
16                 }
17                 return true;
18             }
19         }
20         return false;
21     }

java类库中均对equals()方法进行重写,String类中的实现如上。可以看到,返回true的条件是:

  (1)传入的对象引用与该String引用相等;

  (2)传入的对象是String类的一个实例且值与String的值相等。

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

如何重构这个 Java 代码片段

Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还 是 equals()?它们有何区别?

[转]Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还 是 equals()?它们有何区别?

JAVA中字符串比较equals()和equalsIgnoreCase()的区别

JavaSE8基础 String equals 判断两个字符串的内容是否相同(区分大小写)

Java面试题:hashCode() 和 equals()