亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么同樣是對象,輸出對象名就有不同?

為什么同樣是對象,輸出對象名就有不同?

whopperNuolan 2019-08-10 16:36:38
public?class?Test{ ????Integer?one; } ????public?static?void?main(String[]?args){ ????Test?test?=?new?Test(); ????System.out.println(test);? ????System.out.println(test.one);? ????}為什么輸出對象名的時候,包裝類的對象就不輸出實例化的對象地址??
查看完整描述

1 回答

已采納
?
給我丶鼓勵啊

TA貢獻4條經驗 獲得超3個贊

當調用System.out.println()輸入一個對象的時候,jvm會去調用對象的toString()方法。因為所有對象都會繼承Object對象,因此當當前對象沒有重寫toString()方法的時候,JVM就會調用Object對象的toString()。

以下是Object的toString()源碼,可以看到,輸出的就是你所說的引用。

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

那么為什么Integer對象輸出的確實值,根據上面的描述,Integer應該是重寫了toString()方法,以下是源碼。

public?static?String?toString(int?i)?{
????if?(i?==?Integer.MIN_VALUE)
????????return?"-2147483648";
????int?size?=?(i?<?0)???stringSize(-i)?+?1?:?stringSize(i);
????char[]?buf?=?new?char[size];
????getChars(i,?size,?buf);
????return?new?String(buf,?true);
}

可以看到,Integer因為重寫了toString()方法,所以輸出的數據才會不一樣。

因此想輸出自定義內容,可以重新對象類的toString()方法

查看完整回答
2 反對 回復 2019-08-11
  • 1 回答
  • 0 關注
  • 559 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號