== 和 equals 的区别是什么?

使用 == 比较

Java中的8种基本数据类型(byte,short,char,int,long,float,double,boolean)比较他们之间的值是否相等。

引用数据类型,比较的是他们在堆内存地址是否相等。每新new一个引用类型的对象,会重新分配堆内存空间,使用==比较返回false。

使用 equals 比较

equals方法是Object类的一个方法,Java当中所有的类都是继承于Object这个超类。

JDK1.8 Object类equals方法源码如下,即返回结果取决于两个对象的使用==判断结果。

public boolean equals(Object obj) {

    return (this == obj);

}

在实际使用中,一般会重写定义的class的equals方法,如JDK1.8 java.lang.String类的equals源码如下。

即两个字符串使用 == 相等 或者 两个字符串的所有组成字符都相等返回true,其他情况返回false。这里就定义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;

}


总结:

== 的作用:

  基本类型:比较值是否相等

  引用类型:比较内存地址值是否相等

equals 的作用:

  引用类型:默认情况下,比较内存地址值是否相等。可以按照需求逻辑,重写对象的equals方法。

————————————————

版权声明:本文为CSDN博主「ConstXiong」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/meism5/...


书写人生
65 声望3 粉丝