日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[转载] java重写toString()方法

發(fā)布時間:2025/3/11 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转载] java重写toString()方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

參考鏈接: 在Java中重寫toString()

前言: 在你興高采烈的寫完一個類,創(chuàng)建測試類時,創(chuàng)建對象,傳入?yún)?shù),調(diào)用對象,以為會得到參數(shù)值,但突然發(fā)現(xiàn)輸出的是“ 類名@什么東東?(其實是散列碼,也是16進制的哈希值哈)”,反復檢查代碼,但不知怎么修改。我不知道你們有沒有這種情況發(fā)生,但是我經(jīng)常就有,原因當然是因為不習慣重寫toString方法和基礎(chǔ)知識還不足導致的啦。還是要加油呀!所以記錄一下學習的toString()方法。?

1.1 在Object類中有一個重要的方法:toString()方法。?

作用:用于返回表示對象值的字符串?

1.2 為啥要重寫toString方法呢??

Object類中的toString方法返回的是什么呢?我們打開toString源碼發(fā)現(xiàn):?

? ? public String toString() {

? ? ? ? return getClass().getName() + "@" + Integer.toHexString(hashCode());

? ? }

?

返回的字符串是:類名@散列碼。 那為什么其它類的對象返回的也是這樣的形式呢?因為所有的類的超類都是Object類。(可在類中按住ctrl+t查看繼承關(guān)系)?

例如: 創(chuàng)建一個People類:?

public class People {

? ? private String name;

? ? private int age;

? ? public People(String name,int age) {

? ? ? ? this.name = name;

? ? ? ? this.age = age;

? ? }

? ? public String getName() {

? ? ? ? return name;

? ? }

? ? public void setName(String name) {

? ? ? ? this.name = name;

? ? }

? ? public int getAge() {

? ? ? ? return age;

? ? }

? ? public void setAge(int age) {

? ? ? ? this.age = age;

? ? }

}

?

?

測試類:?

/**

?* toString方法的調(diào)用

?* @懶惰的小黑

?*

?*/

public class toStringTest {

? ? public static void main(String[] args) {

? ? ? ? People p = new People("懶惰的小黑",20);

? ? ? ? System.out.println(p);? ? ? ? ? ? ? //p會自動調(diào)用toString方法

? ? ? ? System.out.println(p.toString());? ? //手動調(diào)用

? ? }

}

?

?

執(zhí)行結(jié)果: com.xiaohei.text.People@279f2327 com.xiaohei.text.People@279f2327?

但是你想輸出的并非是這樣的結(jié)果,而是想輸出對象的具體描述(name和age),所以需要在類中重寫toString方法。 重寫toString方法:?

? ? public String toString() {

? ? ? ? return "[name = " + getName() + ",age = "+ getAge() + "]";

? ? }

?

測試:?

? ? ? ? People p = new People("懶惰的小黑",20);

? ? ? ? System.out.println(p);? ? ? ? ? ? ? //p會自動調(diào)用toString方法

?

執(zhí)行結(jié)果: [name = 懶惰的小黑,age = 20]?

實際上,還可以設(shè)計的更好一些。最好通過getClass().getName() + 類的描述:獲取類名的字符串(地址)+類的描述。 例:?

? ? public String toString() {

? ? ? ? return getClass().getName() + "[name = " + getName() + ",age = "+ getAge() + "]";

? ? }

?

測試: 同上例 執(zhí)行結(jié)果: com.xiaohei.text.People[name = 懶惰的小黑,age = 20]?

注意: 此處的getClass().getName()中的getName并非People類中的getName方法!?

1.3 toString方法也可供子類使用,子類只需調(diào)用super.toString()。?

例如: 創(chuàng)建子類:?

class Teachers extends People{

? ? private int salary;

? ? public Teachers(String name, int age,int salary) {

? ? ? ? super(name, age);

? ? ? ? this.salary = salary;

? ? }

? ? public int getSalary() {

? ? ? ? return salary;

? ? }

? ? public void setSalary(int salary) {

? ? ? ? this.salary = salary;

? ? }

? ? public String toString() {

? ? ? ? return super.toString() + ",salary = " + getSalary();

? ? }

}

?

測試:?

public class toStringTest {

? ? public static void main(String[] args) {

? ? ? ? Teachers t = new Teachers("懶惰的小黑",20,5000);

? ? ? ? System.out.println(t);

?

? ? }

}

?

?

執(zhí)行結(jié)果: [name = 懶惰的小黑,age = 20],salary = 5000?

1.4 數(shù)組類型調(diào)用toString()方法?

數(shù)組繼承了Object類中的toString方法,數(shù)組類型會按舊格式打印。?

例如:?

public class ArraytoStringTest {

? ? public static void main(String[] args) {

? ? ? ? int[] a = {5,6,2,1,3};

? ? ? ? System.out.println(a);? ? ? ? ? ? //自動調(diào)用toString方法

?

執(zhí)行結(jié)果:[I@1f32e575 注:[I 表明是一個整形數(shù)組。?

所以我們需要調(diào)用Array.toString 方法 例如:?

import java.util.Arrays;

?

public class ArraytoStringTest {

? ? public static void main(String[] args) {

? ? ? ? int[] a = {5,6,2,1,3};

? ? ? ? String a1 = Arrays.toString(a);

? ? ? ? System.out.println(a1);

? ? }

}

?

?

執(zhí)行結(jié)果:[5, 6, 2, 1, 3]?

說明:為什么會出現(xiàn)這種形式呢?按住ctrl點擊toString方法,查看源碼:?

? ? public static String toString(int[] a) {

? ? ? ? if (a == null)

? ? ? ? ? ? return "null";

? ? ? ? int iMax = a.length - 1;

? ? ? ? if (iMax == -1)

? ? ? ? ? ? return "[]";

?

? ? ? ? StringBuilder b = new StringBuilder();

? ? ? ? b.append('[');

? ? ? ? for (int i = 0; ; i++) {

? ? ? ? ? ? b.append(a[i]);

? ? ? ? ? ? if (i == iMax)

? ? ? ? ? ? ? ? return b.append(']').toString();

? ? ? ? ? ? b.append(", ");

? ? ? ? }

? ? }

?

注意:打印多維數(shù)組則需調(diào)用Arrays.deepToString()方法?

總結(jié)提醒:建議類中都要重寫toString方法,方便后面程序員的調(diào)用!

總結(jié)

以上是生活随笔為你收集整理的[转载] java重写toString()方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。