"=="是一个运算符,对于对象A和B,如果表达式为 A==B ,将比较 A和B所指向的对象是否是同一个,如果式同一个对象的话,为true , vise versa.
==永远比较的是对象所指的指针。
equals()是从Object类继承下来的方法,对于没有重载equals()方法的类来说,调用A.equals(B)将使用Object类默认的equals()函数。从spec中的java.lang.Object#equals()的说明来看 ,“当且仅当
对于那些override了equals方法的class来说,如何确定equals的定义就是和spec的具体要求有关了。
不过要注意的是,“当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。”(来自java spec)。同样,Effective Java中也特别强调了重写equals函数之后, 一定要重写hashCode()。应该是绝大多数的equals函数是通过判断hashCode来得出结果的。
对于String对象来说,它重写了equals()方法,要求是“比较此字符串与指定的对象。当且仅当该参数不为
对 于数组来说,比较两个数组是否相等,应该调用Array.equals()方法。java.util.Arrays类提供了多个equals()的 static方法,分别用于比较boolean,byte,char,short,int,long,float,double和object数组是否相 等。
要测试两个String[]是否相等,应该使用java.util.Arrays.equals(String[], String[]).
equals()是从Object类继承下来的方法,对于没有重载equals()方法的类来说,调用A.equals(B)将使用Object类默认的equals()函数。从spec中的java.lang.Object#equals()的说明来看 ,“当且仅当
x
和
y
引用同一个对象时,此方法才返回
true
(
x == y
具有值
true
)”即默认的equals方法和“==”的结果是一致的。
对于那些override了equals方法的class来说,如何确定equals的定义就是和spec的具体要求有关了。
不过要注意的是,“当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。”(来自java spec)。同样,Effective Java中也特别强调了重写equals函数之后, 一定要重写hashCode()。应该是绝大多数的equals函数是通过判断hashCode来得出结果的。
对于String对象来说,它重写了equals()方法,要求是“比较此字符串与指定的对象。当且仅当该参数不为
null
,并且是表示与此对象相同的字符序列的
String
对象时,结果才为
true
。”。
对 于数组来说,比较两个数组是否相等,应该调用Array.equals()方法。java.util.Arrays类提供了多个equals()的 static方法,分别用于比较boolean,byte,char,short,int,long,float,double和object数组是否相 等。
要测试两个String[]是否相等,应该使用java.util.Arrays.equals(String[], String[]).