CodeGym /Java Blog /Toto sisi /Java toString() 方法
John Squirrels
等級 41
San Francisco

Java toString() 方法

在 Toto sisi 群組發布
在創建程式時,經常需要找出物件的內容。為此,Java Object類別(類別層次結構中最基本的 Java 類別)定義了一個特殊的toString()方法。它傳回描述該物件的字串。Java 中toString()方法的預設實作產生如下輸出:
package.class@hashCode
java.lang.Object中定義的toString以十六進位形式給予物件的雜湊碼。這通常不是很清楚和有用。所以在建立新類別時,習慣重寫toString(),以便傳回字串包含類別名稱、所有變數的名稱和值。正確重寫toString方法可以幫助記錄和調試 Java 程序,它提供了有價值且重要的資訊。簡單來說,Java中使用toString()方法來取得表示數字物件值的字串物件。換句話說,它將數字轉換為字串。如果此方法採用簡單資料類型作為參數,則傳回一個表示簡單資料類型值的字串物件。

Java toString() 方法範例

通常,如果您建立一個類別,除了Java 中的toString()方法之外,您還需要重寫equalshashCodeCompareTo方法,以便了解如何使用其物件。但現在,讓我們專注於toString。在大多數情況下,提交有關對象的文字資訊非常簡單。您只需要了解用戶在登入時到底想看到什麼。讓我們舉一個例子並創建一個描述平面上的點的類別。它有兩個座標:座標X、座標Y。當然,如果用戶詢問“這是什麼物件”,它們應該顯示在螢幕上,就像類別本身的名稱一樣。這就是我們將在重寫的toString()方法中示範的內容。現在我們創建類別本身、它的欄位(座標)、建構函式、用於取得座標的 getter(當然,可以不建立它們,但從正確使用 OOP 的角度來看,getter 是很好的做法)。為了說明這一點,我們還建立一個方法來建立一個新點 - 其他兩個點的總和,並重寫 equals 和hashCode方法。
public class Point implements Comparable<Point> {
   private final int coordinateX;
   private final int coordinateY;

   public Point(final int coordinateX, final int coordinateY) {
       this.coordinateX = coordinateX;
       this.coordinateY = coordinateY;
   }

   public int getX() {
       return coordinateX;
   }

   public int getY() {
       return coordinateY;
   }

   public Point sum(final Point that) {
       return new Point(coordinateX + that.coordinateX, coordinateY + that.coordinateY);
   }

// here we override toString with coordinates and class name
   @Override
   public String toString() {
       return "Point{"
               + "X: " + getX()
               + ", Y: " + getY()
               +  '}';
   }

   @Override
   public boolean equals(Object o) {
       if (o == this) {
           return true;
       }
       if (o == null || o.getClass() != this.getClass()) {
           return false;
       }

   @Override
   public int hashCode() {
       return coordinateX + coordinateY;

   }
現在讓我們建立一個測試類別和一個 main 方法。我們得到了兩點,第三點是我們從兩點相加得到的。我們對這一點 應用toString方法並將其列印出來。
//toString() method demo
public class Test {
   public static void main(String[] args) {
       Point myPoint1 = new Point(5,7);
       Point myPoint2 = new Point(-2, 8);
       Point mySum = myPoint1.sum(myPoint2);
     //call toString explicitly
       System.out.println(mySum.toString());
   }
}
該計劃的工作結果如下:
點{X:3,Y:15}
您實際上不需要明確呼叫toString方法,而且大多數情況下也不需要。要呼叫toString()方法,只需將所需的物件傳遞給System.out.println即可。所以我們的測試類別將如下所示:
//toString method demo
public class Test {
   public static void main(String[] args) {
       Point myPoint1 = new Point(5,7);
       Point myPoint2 = new Point(-2, 8);
       Point mySum = myPoint1.sum(myPoint2);
       //call toString implicitly
       System.out.println(mySum);
   }
}
程式的輸出與之前相同。如果我們不重寫toString方法,但想列印物件怎麼辦?在這種情況下,將呼叫Object類別的toString方法。在我們的範例中,如果我們從Point類別中刪除toString方法,並保留測試類別中的所有內容,我們將得到以下結果:
點@12
這裡我們得到了物件的十六進位哈希碼。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION