2012-07-08 66 views
14

我在讀the docs並注意到它。從來沒有想過它。描述:String的toString()方法有實際用途嗎?

該對象(它已經是一個字符串!)本身被返回。

除了填充公約或使用計算資源,這是什麼一個.toString()在Java中對String做,使用String本身就沒有呢?爲什麼它不只是繼承了java.lang.Object類的.toString()

編輯:

據我瞭解,在多態的情況下,一個自己toString()方法必須存在,因爲它推翻了其父的toString()。我在第一個問題中想知道的是,如果在使用stringVariable/"String value"和使用stringVariable.toString()/"String value".toString()之間存在任何不同的情況。

Ex。 gr:類似System.out.println(stringVariable.toString());的輸出操作或像stringVariable = "String value".toString();這樣的值賦值。

+0

你好。如果你在暫停解除後沒有看到它,JohnDoDo就Jon的回答發表了評論。 FWIW,如果你回來了,請考慮恢復所有未被接受的答案 - 如果他們當時能接受,那些有幫助的人會因爲不受他們控制的事件而受到懲罰。 – halfer 2014-07-08 05:25:04

回答

34

除了填充約定或使用計算資源,Java中的.toString()對使用String本身的字符串不會做什麼?

這意味着當多態調用時它會給出合適的結果。

爲什麼它不是簡單地從類java.lang.Object繼承.toString()?

,因爲這會不會產生相同的結果,而且幾乎肯定不是所需結果。

Object.toString()旨在給出對象的合理有用的字符串表示形式。 Object實現提供了有關可用於粗略身份提示的類型和值的信息(診斷有用,但僅此而已)。很明顯,不是字符串最有用的字符串表示形式 - 字符串本身是。

雖然我說,它是toString在相當毛茸茸的方式定義(目前還不清楚該結果是否是爲機,開發者或用戶消費)可惜,那感覺明顯,我認爲一個String會在實施中返回自己。

+5

有效的Java第10項討論了避免完全指定'toString()'的一些原因:因爲有人會不可避免地決定解析它是一個好主意。 – 2012-07-08 21:14:44

+1

@TrevorTrovalds:文檔沒有回答這個問題嗎?它返回「this object」 - 所以不,在沒有使用'foo'和'foo.toString()'的情況下,'foo'是一個非空的'String'引用的結果。 – 2012-07-09 11:56:32

+2

@TrevorTrovalds:恩,是啊 - 雖然我*不會*用它來達到這個目的。 – 2012-07-09 14:28:29

0

在java中實現toString方法是通過覆蓋ObjecttoString方法來完成的。當我們需要對象的字符串表示時,使用java toString()方法。它在Object類中定義。可以覆蓋此方法來自定義ObjectString表示形式。

0

實例:

public abstract class MetadataProcessor { 

protected void processMetadata() {  
    Map<String, Object> metadata = getMetadata(); 
    for(String key : metadata.keySet()) { 
     if(metadata.get(key) instanceof Date) { 
     processDate(metadata.get(key)); 
    } else { //String or any other object type 
     processString(metadata.get(key).toString()); 
    } 
} 

private void processDate(Date date) { 
    (...) 
} 

private void processString(String string) { 
    (...) 
} 

/** 
* contains document's metadata, values must be String or Date 
**/ 
protected abstract Map<String, Object> getMetadata(); 
} 

如果字符串的。toString()不會返回字符串本身,在上面的代碼中需要額外的if(foo instanceof String)