乐趣区

和-equals的区别skycto-JEEditor

== 和 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/…

退出移动版