5.1 toString()方法 -【Java入門--瘋狂Java講義】

toString()方法在前面已經提到過,但沒有重點說,提到是在包裝類的時候,我們提到包裝了有toString()方法,可以將本類型轉換成字符串類型,那麼用法是這樣的:

Integer i = 15;
String s = i.toString();
System.out.println(s);//15

 可以看出,上面的代碼與下面的代碼效果一樣:

Integer i = 15;
System.out.println(i);//15

那麼,在println()方法中可以傳入什麼參數呢?

這是Eclipse中的代碼提示,裏面顯示了println()方法重載的類型,可以有什麼參數傳入,這裏我們可以看出,可以傳入的類型中除了基本數據類型、空、還有幾種基本數據類型之外,還有String和Object類型,那既然有Object類型的話,所有的自定義類型都可以傳入了,那麼自定義的類傳入有什麼效果呢?

package j2seTest;
class Per{
	public String name;
	public Per(String name) {
		super();
		this.name = name;
	}
}

public class Test07 {

	public static void main(String[] args) {
		Per per = new Per("張三");
		System.out.println(per);//j2seTest.Per@1363271
		System.out.println();
	}

}

可以看出我們定義的類輸出的是“j2seTest.Per@1363271”這麼一串字符, 那麼分析一下@前面的是我的類名(帶包結構的),而@後面的是類的哈希碼,那麼,爲什麼會這麼輸出呢?

這是因爲,我們的Per類繼承了Object的toString方法,可以查看Object的源碼,

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

這是Object的源碼,所以引用類是繼承了Object的toString方法,所以才輸出了一串 “j2seTest.Per@1363271”這樣的值,那麼既然使用的是父類的方法,那我們可以重寫嗎?當然是可以的,看最上面的示例,我們看到System.out.println();裏面並沒有包裝類類型的參數,那麼使用包裝類做參數應該輸出的是類名@哈希碼格式的字符串啊,爲什麼會輸出這個值呢?

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()方法的源碼,我們發現和父類的不一樣了,所以Integer類重寫了父類的toString方法,其他的包裝類也重寫了toString()方法,這就是我們println()的時候,輸出的是我們定義的值的原因,那麼我們自己定義的類怎麼重寫toString方法呢?

class Per{
	public String name;
	public Per(String name) {
		super();
		this.name = name;
	}
	@Override
	public String toString() {
		return "Per [name=" + name + "]";
	}
}

public class Test07 {

	public static void main(String[] args) {
		Per per = new Per("張三");
		System.out.println(per);//Per [name=張三]
		System.out.println();
	}

}

這就是我們剛開始的那個類重寫toString()方法的一個例子,當然方法體可以自己隨便寫,這裏要說明的一點是, @Override是一個註釋,爲了編譯的時候來驗證我們的重寫是否有效,這個我們後面會系統的學習的,這一句省略也是可以的。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章