2015-11-10 64 views
1

第一種情況下的.equals方法比較內容並給出true,但在第二種情況下給出false,爲什麼?對於第二種情況,爲什麼不是這樣?。對於String類和用戶定義類的.equals方法

public abstract class Base { 

    public static void main(String[] args) 
    { 
     //case 1 
     String s1=new String("abc"); 
     String s2=new String("abc"); 

     System.out.println(s1.equals(s2)); //true 

     //case 2 
     Child c =new Child("abc"); 
     Child c1=new Child("abc"); 

     System.out.println(c.equals(c1)); //false 
     } 
    } 

    public class Child extends Base{ 
     private String obj; 


     public Child(String string) { 
      this.obj=string; 
      //System.out.println(obj); 
     } 
    } 
} 

結果:

true 
false 
+0

在第二種情況下,您正在比較'對象'。您必須重寫Object類的'.equals' – 3kings

+0

Child或其任何超類(Object)是否聲明瞭.equals方法? –

回答

0

您必須覆蓋在自定義對象的equals()方法。

class Child { 
    @Override 
    public boolean equals(Object otherObj) { 
     // TODO Auto-generated method stub 
     return this.obj.equals(otherObj); 
    } 
} 
1

爲了測試在Child類值相等,則需要Override等於。因爲默認Object版本進行比較的參考 -

@Override 
public boolean equals(Object o) { 
    if (this == o) { // <-- reference identity test. 
     return true; 
    } 
    if (o instanceof Child) { 
     Child c = (Child) o; 
     return obj.equals(c.obj); 
    } 
    return false; 
} 
+0

我明白了...謝謝了! – user5545033

+0

@Elliott什麼是obj和c.obj在這裏? –

+1

@supun原始帖子中定義的唯一字段。 –

1

的equals()方法比較相等的兩個對象,如果它們相等返回true。 Object類中提供的equals()方法使用標識符運算符(==)來確定兩個對象是否相等。對於原始數據類型,這給出了正確的結果。然而,對於對象而言,事實並非如此。 Object提供的equals()方法測試對象引用是否相等 - 也就是說,如果比較的對象是完全相同的對象。

要測試兩個對象是否相等(包含相同的信息),您必須重寫equals()方法。這裏是重寫equals()方法一個Book類的一個示例:

public class Child{ 
    ... 
    public boolean equals(Object obj) { 
     if (obj instanceof Child) 
      return ISBN.equals((Child)obj.getISBN()); 
     else 
      return false; 
    } 
} 

考慮以下代碼以測試是否相等Book類的兩個實例:

Child firstChild = new Child("0201914670"); 
Child secondChild = new Child("0201914670"); 
if (firstChild.equals(secondChild)) { 
    System.out.println("objects are equal"); 
} else { 
    System.out.println("objects are not equal"); 
} 

此程序顯示對象是相等的,即使firstChild和secondChild引用兩個不同的對象。它們被認爲是相等的,因爲比較的對象包含相同的ISBN號碼。

如果身份運算符不適合您的類,則應始終重寫equals()方法。

來源:[1]:http://docs.oracle.com/javase/tutorial/java/IandI/objectclass.html

+0

謝謝你的解釋。 – user5545033

+0

Hay thanx,你必須接受一個答案。 –

0

公共布爾等於(object對象):這種方法被覆蓋在字符串和Java中的所有包裝類,所以你的情況下,1返回true。

//case 1 

//.equal method are overriden in String class 
    String s1=new String("abc"); 
    String s2=new String("abc"); 

    System.out.println(s1.equals(s2)); //true 

當您創建自定義類時,它實際上使用了它的超類平等方法,即Object類。 您只需要重寫類中的equals方法即可正常運行。

相關問題