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

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么沒有調用類中的toString()方法,卻自動實現了轉換?

package?test;

public?class?MyDate?{
	int?year;
	int?month;
	int?day;
	
	void?set(int?y,int?m,int?d){
		year=y;
		month=m;
		day=d;
	}
	void?set(MyDate?d){
		set(d.year,d.month,d.day);
	}
	public?String?toString(){
		return?year+"年"+month+"月"+day+"日";
	}
	public?boolean?equals(MyDate?d){
		return?this==d||d!=null&&year==d.year&&month==d.month&&day==d.day;
	}
	public?static?void?main(String?args[]){
		MyDate?d1=new?MyDate();
		d1.set(2009,7,16);
		MyDate?d2=d1;
		System.out.println("d1:"+d1+",d2:"+d2+",d1==d2?"+(d1==d2));
		d2.year=2008;
		System.out.println("d1:"+d1+",d2:"+d2+",d1==d2?"+(d1==d2)+",d1.eguals(d2)?"+(d1.equals(d2)));
		d2=new?MyDate();
		d2.set(d1);
		System.out.println("d1:"+d1+",d2:"+d2+",d1==d2?"+(d1==d2)+",d1.eguals(d2)?"+(d1.equals(d2)));
		
	}

}

輸出結果是:

d1:2009年7月16日,d2:2009年7月16日,d1==d2?true

d1:2008年7月16日,d2:2008年7月16日,d1==d2?true,d1.eguals(d2)?true

d1:2008年7月16日,d2:2008年7月16日,d1==d2?false,d1.eguals(d2)?true


代碼中并沒有調用過toString()方法,為什么最后輸出的時候會自動調用了呢?

正在回答

1 回答

如果你輸出的是對象,d1等效為d1.toString()下面是理由:

1、System.out.println(center.toString())這句對應的源碼:

public?void?println(String?x)?{

????synchronized?(this)?{

????????print(x);?//?打印x

????????newLine();?//?換行

?}

}

這能看懂吧,直接輸出了傳進來的參數x(center.toString())

2、System.out.println(center)這句對應的源碼:

public?void?println(Object?x)?{

????????String?s?=?String.valueOf(x);?//?x對象轉換為String

????????synchronized?(this)?{

????????????print(s);

????????????newLine();

????????}

????}

?主要看String?s?=?String.valueOf(x);這句,然后再看看是怎么把對象x轉換為String的,

?String.valueOf(x)對應的源碼:

?public?static?String?valueOf(Object?obj)?{

????return?(obj?==?null)???"null"?:?obj.toString();

????}

??這下看到了吧,把剛才那x(也就是你的center)轉換為String是調用了obj.toString()得到

??的。

??所以"直接輸出對象時,會默認調用對象toString()方法


0 回復 有任何疑惑可以回復我~
#1

shenzhi 提問者

說的很清楚,謝謝~
2015-12-04 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

為什么沒有調用類中的toString()方法,卻自動實現了轉換?

我要回答 關注問題
微信客服

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

幫助反饋 APP下載

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

公眾號

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