2013-07-26 55 views
6

這個程序當我在java中打印** this **指針時,它顯示的數字是多少?

public class HelloWorld{ 
    public void testFunc(){ 
     System.out.println("Class = "+this); 
    } 

    public static void main(String[] args){ 
     HelloWorld hw = new HelloWorld(); 
     System.out.println("Hello, World"); 
     hw.testFunc(); 
    } 
} 

給了我這樣的輸出:

Hello, World 
Class = [email protected] 

什麼的HelloWorld後也@7c6768在第二行是什麼意思?

+0

HelloWorld的hashCode類 –

+1

它返回對象的toString()。如果沒有超過,那將是classname @ hashcode在hexa –

+0

@KanagarajM不是_class_,而是_instance_類的類。 – jlordo

回答

7

As per Docs of toString() method in Object class

Object類的toString方法返回自由以下組成的一個串對象是實例的類的名稱,符號字符「@」和對象的哈希代碼的無符號十六進制表示。換句話說,該方法返回一個字符串等於值:

getClass().getName() + '@' + Integer.toHexString(hashCode()) 

當您在對象調用toString(),如果你ovveride像下面,你會得到自己的實現

@Override 
    public String toString() { 
    //return something 
    } 

否則給出了默認的實現,你看到現在

From Object class Source code

返回對象的字符串表示形式。通常,toString方法返回一個「文本表示」該對象的字符串。結果應該是一個簡潔但內容豐富的表述,對於一個人來說很容易閱讀。建議所有子類重寫此方法。

類Object的toString方法返回一個字符串,其中包含對象爲實例的類的名稱,符號字符「@」和對象的哈希代碼的無符號十六進制表示形式。換句話說,此方法返回一個字符串等於的值: 的getClass()的getName()+ '@' + Integer.toHexString(hashCode()方法)

Returns: 
a string representation of the object. 


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

+1正確答案。 –

+1

我只是想補充一點:您可以重寫該對象中的toString()方法以打印更有意義的內容。 – Lenymm

+0

是的,如果我定義一個函數爲'@Override \t public String toString(){ \t \t return「TEST」; \t} \t'它顯示我TEST而不是默認值。 – user13267

2

那就是this.hashCode()。由於您沒有重新定義hashCode(),因此此數字是存儲對象的JVM中的內存地址。

3

從API:

Object類的toString方法返回一個由其中的對象是一個實例,該符號字符'@」的類的名稱的字符串,並且無符號對象的哈希碼的十六進制表示

9

toString()方法返回一個對象的字符串表示。

通常,toString()方法會返回一個字符串,該字符串以文本方式表示該對象。結果應該是一個簡潔但內容豐富的表述,對於一個人來說很容易閱讀。建議所有子類重寫此方法。

class ObjecttoString方法返回一個字符串,其中包含對象爲實例的類的名稱,符號字符「@」和對象的哈希代碼的無符號十六進制表示形式。換句話說,該方法返回一個字符串等於值:

getClass().getName() + '@' + Integer.toHexString(hashCode()) 
13

對象的toString()爲實現如下:

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

由於您HelloWorld類沒有覆蓋它,這是方法調用。

+0

對不起,但我想問一個我似乎理解的非常基本的問題:在您的代碼中,當您說'getClass()。getName()'時,getClass()和getName()屬於哪個類? getClass()是這個toString()函數定義的類的成員函數嗎?如果是這樣,getName()從哪裏來? – user13267

+0

Java中的每個類都擴展了'Object',參見http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html這就是爲什麼每個類都有'getClass()'方法的原因。 – jlordo

2

往裏對象toString()方法:

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

它是對象的哈希值。

2

唯一標識對象的數字。它是哈希碼的十六進制表示。簡而言之,打印的整個字符串是實例化類後返回的引用。

3

如果你看到在Object類的toString()方法

/** 
* Returns a string representation of the object. In general, the 
* {@code toString} method returns a string that 
* "textually represents" this object. The result should 
* be a concise but informative representation that is easy for a 
* person to read. 
* It is recommended that all subclasses override this method. 
* <p> 
* The {@code toString} method for class {@code Object} 
* returns a string consisting of the name of the class of which the 
* object is an instance, the at-sign character `{@code @}', and 
* the unsigned hexadecimal representation of the hash code of the 
* object. In other words, this method returns a string equal to the 
* value of: 
* <blockquote> 
* <pre> 
* getClass().getName() + '@' + Integer.toHexString(hashCode()) 
* </pre></blockquote> 
* 
* @return a string representation of the object. 
*/ 
public String toString() { 
    return getClass().getName() + "@" + Integer.toHexString(hashCode()); 
} 

它返回類名之後是哈希碼。這是你得到的數字。