3 回答

TA貢獻(xiàn)18條經(jīng)驗(yàn) 獲得超15個(gè)贊
哈哈 你這個(gè)代碼很有趣,我特意自己試了下,然后看了下System.out.print()方法的源碼,找到了原因。
首先你的hello類重寫了toString方法,你在main方法中調(diào)用了System.out.print(new hello()),為了找到原因我們看下System.out.print方法里干了什么。
按住ctrl鼠標(biāo)點(diǎn)擊print,看到了print方法的源碼如下:
public void print(Object obj) {
? ? ? ? write(String.valueOf(obj));
? ? }
我們可以看到String.valueOf(obj),obj不就是hello類的對(duì)象嘛,我們?cè)倏纯碨tring.valueOf這個(gè)方法里做了什么鬼事情。
關(guān)鍵的來了,String.valueOf里一看全明白了,源碼實(shí)現(xiàn)如下:
public static String valueOf(Object obj) {
? ? ? ? return (obj == null) ? "null" : obj.toString();
? ? }
obj是我們的hello類的對(duì)象,obj是我們自己傳進(jìn)來的,肯定不會(huì)為空吧,那就調(diào)用了obj.toString方法唄。我們的hello類正好重寫了此方法,然后就被順理成章的調(diào)用了。然后打印了toString里的字符。

TA貢獻(xiàn)3593條經(jīng)驗(yàn) 獲得超0個(gè)贊

TA貢獻(xiàn)53條經(jīng)驗(yàn) 獲得超11個(gè)贊
打印一個(gè)對(duì)象時(shí)自動(dòng)調(diào)用對(duì)象的toString()方法,打印的是基本類型時(shí),調(diào)用包裝類的toString()方法

TA貢獻(xiàn)17條經(jīng)驗(yàn) 獲得超5個(gè)贊
toString()方法就在hello類里,new hello()實(shí)例化后當(dāng)然會(huì)調(diào)用了
添加回答
舉報(bào)