2014-01-13 76 views
-2

我知道的來源 「等於」,在Object類中的方法如下:Java中「equals」的含義是什麼?

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

下面是一個例子:

package equals; 

public class Main { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 

    Object ObjA = new String("BBB"); 
    Object ObjB = new String("BBB"); 
    System.out.println(ObjA.equals(ObjB)); //the result is:true 
    System.out.println(ObjA == ObjB);  //the result is:false 
} 
} 

我知道這是真的,如果我改變

Object ObjA = new String("BBB"); 
Object ObjB = new String("BBB"); 

String strA = new String("BBB"); 
String strB = new String("BBB"); 

但是現在,我使用Object,我無法理解它。 誰能告訴我理由? 這就是!

+4

這並不重要'Object'的執行'等於()'是。你的對象是'String'類型的。這是'String'的實現。 –

+0

equals()方法匹配兩個對象並返回true或false –

回答

2

這是java的多態性。您可以參考以下網址獲取更多信息。 http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html

此外,我寫了一個簡單的程序,您的關注:

public class testPolymophism { 

    public static void main (String[] args){ 
     animal a = new dog(); 
     animal b = new cat(); 
     a.call(); 
     b.call(); 
    } 
} 

class animal{ 

    public void call(){ 
     System.out.println("Specific to what animal is."); 
    } 
} 

class dog extends animal{ 
    public void call(){ 
     System.out.println("Bark!"); 
    } 
} 
class cat extends animal { 
    public void call(){ 
     System.out.println("Mia~"); 
    } 
} 

輸出:

Bark! 
Mia~ 
+0

我對java.Thanks的多態性沒有很好的理解。我知道原因。 –

0

Java在運行時(運行時調度)選擇方法實現,而不是編譯代碼時。不要緊,你告訴編譯器假裝字符串是java.lang.Object。當代碼執行時,方法dispacther將從對象的真正運行時類型中選擇equals()的實現。

0

在java中,當你說:

ObjA == ObjB 

它被看作絕對迂腐爲「是否Obja指向同一個對象Objb」

儘管「.equals」方法的對象中實現並因班級而異。大多數情況下它符合你的期望,即比較班級的一些內部成員的平等。但這完全取決於課程的實施。