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());
如有幫助,請點贊吶。