Java中對toString()方法的學習和認知

toString()的作用是什麼?

將對象中各個屬性值按字符串的方式輸出出來。也就是:使用文字描述這個對象裏各個變量是什麼值 ,這個變量是什麼類型的變量等

爲什麼要重寫ToString?

任何類都從Object繼承了這個方法,不重寫toString()方法的話輸出的就是一個內存地址,也就是哈希碼值,並不是輸出這個類的各個變量的值。
不重寫返回的是: getClass().getName() + “@” +Integer.toHexString(hashCode());
即: 類名 + @ +hashCode的值 這三者組合而成

下面我們先看一個不重寫toString()的案例:

package test;

public class TestToString2 {
	
	  public static void main(String[] args){
	 
	    Student2 stu=new Student2("李漁",22);
	    
	    System.out.println(stu);//默認調用了toString()方法
	    //通過編譯會發現,上一句輸出的內容和下一句輸出的內容是完全一樣的
	    System.out.println(stu.toString());//顯示調用toString()方法
 
	}

}
class Student2{
	String name;
	int age;
	public Student2(String name, int age) {
		this.name = name;
		this.age = age;
	}
}

如果不重寫toString()方法,編譯之後打印內容是這樣的:
在這裏插入圖片描述
顯示的是toString()方法默認提供的返回值:getClass().getName() + “@” +Integer.toHexString(hashCode());
當然我這個是因爲有包的存在,所以在類名前面還有一個包名

下面我們再看一下重寫toString()方法之後的案例:

package test;

public class TestToString {
	
	  public static void main(String[] args){
	 
	    Student stu=new Student("李漁",22);
	 
	    String str= stu.toString();
	   
	    System.out.println(str);
	 
	}

}
class Student{
	String name;
	int age;
	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	@Override
	public String toString() {
		return "姓名" + name + ", 年齡" + age ;
	}

}

重寫之後編譯內容是這樣的:
在這裏插入圖片描述
通過兩個案例的說明,對重寫toString()的原因也清楚明白了。

需要知道的是:

打印一個對象,可以直接System.out.println(stu);
但其實println方法內部會自動調用stu 的 toString() 方法,即System.out.println(stu.toString());

如有幫助,請點贊吶。

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