2011-06-28 32 views
6

Birisi aşağıdaki örnekte neden hashCode neden çağrıldığını açıklayabilir mi?Bu örnekte neden kod kodu çağrıldı?

import java.util.List; 

public class JSSTest extends Object{ 

    public static void main(String args[]){ 

     JSSTest a = new JSSTest(); 
     JSSTest b = new JSSTest(); 
     List<JSSTest> list = new java.util.ArrayList<JSSTest>(); 
     list.add(a); 
     list.add(b); 
     System.out.println(list.get(0)); 
     System.out.println(list.get(1)); 
    } 

    @Override 
    public boolean equals(Object obj){ 
     System.out.println("equals"); 
     return false; 
    } 

    @Override 
    public int hashCode(){ 
     System.out.println("hashCode"); 
     return super.hashCode(); 
    } 
} 

Sonuç:

hashCode 0 
[email protected] 
hashCode 0 
[email protected] 
+1

Bir yığın izlemeyi veya bir hata ayıklayıcıda satırda bir kesme noktası eklemeyi denediniz mi? –

+2

'1bab50a' veya' c3c749' sayılarına bakmak ve nesnenin hashcode'unu nasıl karşılaştırdığına bakmak büyük bir ipucu olacaktır. –

cevap

15

Varsayılan toString() uygulama hashCode numaralı telefonu arar. Bunun listelere ilgisi yok.

public class JSSTest { 

    public static void main(String args[]){ 
     JSSTest test = new JSSTest(); 
     // Just to show it's not part of creation... 
     System.out.println("After object creation"); 
     test.toString(); 
    } 

    @Override 
    public boolean equals(Object obj){ 
     System.out.println("equals"); 
     return false; 
    } 

    @Override 
    public int hashCode(){ 
     System.out.println("hashCode"); 
     return super.hashCode(); 
    } 
} 

(Sen de ayrıntı da// süper aramadan önce gösterilecek toString() geçersiz olabilir.)

O Object.toString() belgelenmiştir oluyor:

İşte oldukça az üreme var Nesne sınıfı için toString yöntemi, nesnenin bir örnek olduğu sınıfın isminden oluşan bir dizgeyi, '@' işaret karakterini ve imzasız olanı döndürür. nesnenin karma kodunun xadecimal gösterimi. Başka bir deyişle, bu yöntem değerine eşit bir dize döndürür:

getClass().getName() + '@' + Integer.toHexString(hashCode()) 
7
System.out.println(list.get(0)); 

Ben tüm nesneleri kendi sınıfında toString() geçersiz sürece sahip Object.ToString() yönteminin bir parçası olduğuna inanıyoruz. Bunu dene ve gör.

+0

Thx. Bu doğrudur ama sadece bir doğru cevabı işaretleyebilir. U Tickup Verilen Verilen :) – JSS

6

Object yılında toString() uygulama deyimiyle çünkü ..

public String toString() { 
    return getClass().getName() + "@" + Integer.toHexString(hashCode()); 
    } 

üzerine yaz toString ve olmayacak

+0

Thx. Bu doğrudur ama sadece bir doğru cevabı işaretleyebilir. U tickup verildi :) – JSS

İlgili konular