天天看點

Java 值類型與引用類型 神奇的toString()方法

1. 前提

首先,Java中的類型分為值類型與引用類型,具體差別是:

值類型(如int、double)變量中儲存的是值,例如int i=1;中,i儲存的是1。

引用類型(如String)變量中儲存的是位址,例如String str="1";中,str儲存的并不是字元串1,而是該字元串在記憶體中的位址。

2. toString()是啥

OK,那麼為啥System.out.println(i)就是輸出i儲存的内容,而System.out.println(str)輸出str指向的位址的内容。

其實很簡單,在System.out.println()函數執行時,如果發現參數是值類型,那就輸出值,如果發現參數是引用類型,就會輸出該參數的toString()方法。

那麼toString()到底是啥,toString()實際上是定義在Object類中的方法, 而Object類是所有方法的基類,也就是說實際上所有的Java類都是繼承這個類的。

例如你定義一個Student類,他就已經有.toString()方法了,原因就是繼承自Object,而輸出org.maoge.demo.StudentDemo@4511e86f這樣形式的内容,就是Object基類定義的toString()方法的功能。

package org.maoge.demo;

public class StudentDemo {

public static void main(String[] args) {

 StudentDemo sd=new StudentDemo();

 System.out.println(sd.toString());//輸出org.maoge.demo.StudentDemo@4511e86f

}

}

3. String方法的toString()

OK,既然Object類中的toString()方法輸出org.maoge.demo.StudentDemo@4511e86f的内容,為啥String方法的toString()是輸出字元串類型指向位址中儲存的字元串呢,這是因為String方法中的toString()被重寫了,重寫後的功能就是輸出位址中的字元串。

是以我們的Student類也可以重寫toString(),然後成為我們想要的功能,例如:

public String toString(){

 return "StudentDemo是一個學生的示例";

 System.out.println(sd.toString());//輸出StudentDemo是一個學生的示例

4. System.out.println的相關

因為System.out.println能識别參數内容,然後對引用類型自動調用其toString()方法,是以無需在寫System.out.println(sd.toString()),直接寫System.out.println(sd)即可。