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);?
????}為什么輸出對象名的時(shí)候,包裝類的對象就不輸出實(shí)例化的對象地址??
1 回答
已采納

給我丶鼓勵(lì)啊
TA貢獻(xiàn)4條經(jīng)驗(yàn) 獲得超3個(gè)贊
當(dāng)調(diào)用System.out.println()輸入一個(gè)對象的時(shí)候,jvm會去調(diào)用對象的toString()方法。因?yàn)樗袑ο蠖紩^承Object對象,因此當(dāng)當(dāng)前對象沒有重寫toString()方法的時(shí)候,JVM就會調(diào)用Object對象的toString()。
以下是Object的toString()源碼,可以看到,輸出的就是你所說的引用。
public?String?toString()?{ ????return?getClass().getName()?+?"@"?+?Integer.toHexString(hashCode()); }
那么為什么Integer對象輸出的確實(shí)值,根據(jù)上面的描述,Integer應(yīng)該是重寫了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因?yàn)橹貙懥藅oString()方法,所以輸出的數(shù)據(jù)才會不一樣。
因此想輸出自定義內(nèi)容,可以重新對象類的toString()方法
添加回答
舉報(bào)
0/150
提交
取消