2012-05-12 103 views
0
String myString="Plz_help"; 

我開始知道'myString'不是一個對象,而是一個存儲實際對象的基地址的對象引用變量。所以,當我執行爲什麼println打印引用對象的值而不是對象的地址

System.out.println(myString); 

,但它返回「Plz_help」到輸出「的myString」應該返回的地址。

Myclass obj_ref_var=new Myclass(); 

當我爲我創建的其他類使用相同的System.out.println(obj_ref_var)時,它將返回地址。

+0

請填寫MyClass的完整代碼。 –

回答

5

當您在對象引用上調用System.out.println時,系統會執行爲此引用所引用的實際對象定義的方法toString()。對於String,此方法返回其值。

顯然,您尚未定義toString()方法爲您的類,這就是爲什麼你得到對象類名+哈希碼。

+0

明白了。晶瑩剔透。謝謝你andrew.started愛你:) – tez

+0

@tez不客氣=) –

2

println知道String s,並輸出它們的內容。

當您將除String之外的其他內容傳遞到println時,它隱式調用該事件的toString方法。 Object上的默認toString返回你所看到的,這是而不是的地址,而是該類的名稱,@hex version of the object's hash code

+0

所以它不是一個地址。 :) – tez

1

當您的對象爲System.out.println()時,println方法將檢查它是否爲null,如果是,則輸出null。如果它不爲空,則調用對象的toString()方法。 StringtoString()方法重寫了Object.toString()方法,以返回自身。

無論如何,System.out.println()不打印引用,它打印對象本身。 toString()的Object的實現返回對象的類名,後面跟着它的hashCode。

2

那麼,System.out.println使用該引用來調用該對象的toString方法。

由於字符串的toString()方法返回字符串本身,所以這是打印的內容。

但由於您沒有覆蓋MyClasstoString方法,因此它會返回缺省toString,它是classname + hashcode。

相關問題