.equal 和 ==

来源:互联网 发布:mysql regexp使用 编辑:程序博客网 时间:2024/05/21 06:35

老是容易把这两个搞混,记录下,避免下次郁闷......

 

第一、object.equals()与"=="是相同的,都是用来比较两个变量是否有相同的引用。

但是当用作字符串比较时,String.equals()方法则与"=="不同。

API包的java.lang.String中String.equals()重写了object.equals()这个方法,使其专用作比较两个字符串的内容是否一样。

我们可以分析一下java.lang.String.equals()方法.为了比较说明下面把object.equals()与String.equals()的代码都列出来:

1、object.equals()方法

/---------------------------------------------------------------------------------------------------------

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

/---------------------------------------------------------------------------------------------------------

我们可以看出Object 类中定义的 equals(Object) 方法是直接使用 "==" 比较的两个对象.

2、java.lang.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;
    }

/--------------------------------------------------------------------------------------------------

在这个方法中,我们可以看出java.lang.String重写了超类的方法。

       1。首先判断是不是相同的引用,因为引用相同,内容也一定相同。

        2。如果引用不同,则再分析判断长度是不是一样。然后再检查字符串中每一个相同位置上的字符是否相同。

第二、equals(Object) 方法与 "==" 相比的特殊之处就在于它可以覆盖,所以我们可以通过覆盖的办法让它不是比较引用而是比较数据内容。当然 JDK 中也有覆盖过 equals(Object) 方法的类,如 java.lang.String,它就覆盖了从 Object 继承来的的 equals(Object) 方法,用以比较字符串内容是否相同。看看下面这个例子:

public class Example1
{
     public static void main(String[] args)
     {
         String s1=new String("abc");
         String s2=new String("abc");
         System.out.println("用 == 比较结果");
         System.out.println(s1==s2);//false
         System.out.println("用equals(Object) 比较结果");
         System.out.println(s1.equals(s2));//true

     }
}
  例中用 equals(Object) 比较结果为 true。用 == 比较结果为 false。String.equals(Object) 方法直接比较了两个字符串的内容,如果相同则返回 true ,否则返回 false。

原创粉丝点击