java基礎:Object 的toString方法

十五樓亮哥發表於2015-02-01

一:首先看Demo1

<strong><span style="font-size:18px;">public class Dog1{
	Dog1(){
		
	}
	public static void main(String[] args) {
		Dog1 d = new Dog1();
		System.out.println(d);
	}
}</span></strong>
輸出結果:

Dog1@77aaf64d

我們經常會看到物件的輸出結果是這個樣子?但是你想過為什麼會輸出這個結果嗎?


明白這個輸出,需要了解一下Object這個類,Object類是java所有類的基類。

也就是上面的類定義,其實等價於

<strong><span style="font-size:18px;">public class Dog1<span style="color:#ff0000;"> extends Object{</span></span></strong>
<strong><span style="font-size:18px;">Object類中有一個toString()方法</span></strong>
<strong><span style="font-size:18px;">它的實現程式碼為:</span></strong>
<strong><span style="font-size:18px;">
 <span style="color:#ff0000;">public String toString() {
<span style="white-space:pre">	</span>  return getClass().getName() + "@" + Integer.toHexString(hashCode());
  }</span>
</span></strong>

System.out.println(d);
//等價於System.out.println(""+d);
//等價於System.out.println(""+d.toString());
//任何物件與字串拼接,都會將物件轉化為字串型別,相當於呼叫物件的toString方法。這裡就會呼叫父類的toString()方法


二:再來看Demo2

public class Dog2{
	Dog2(){
		
	}
	 public String toString() {
	        return "i am a dog";
	    }
	public static void main(String[] args) {
		Dog2 d = new Dog2();
		System.out.println(d);
		
	}

來看輸出結果:

i am a dog


為什麼呢?

因為Dog2重寫Override了父類Object的toString()方法。就會呼叫自己的toString方法。

建議類最好都重寫一下Object的toString()方法。


相關文章