String.valueOf(Object) Vs. Objects.toString(Object)

有用的String.valueOf(Object)方法從JDK 1.0開始就存在了,是我經常使用的JDK提供的方法之一。對象類是在JDK 1.7中引入的,幷包含了Objects.toString(Object)方法。這篇文章比較了這兩種類似的方法。讓我們去做吧!

兩個方法String.valueOf(Object)和Objects.toString(Object)本質上做的是相同的事情:在傳入的對象上調用toString()方法。這種情況下,只要它不是null,或者當null被傳遞給它們時,它不返回字符串“null”。簡而言之,這兩種方法都旨在提供一種簡單的方法來調用對象的toString(),而無需擔心NullPointerException(如果它被證明為null)。

下表比較了String.valueOf(對象)和Object . tostring(對象)方法的特徵。

CHARACTERISTICSTRING.VALUEOF(OBJECT)OBJECTS.TOSTRING(OBJECT)Java SE 10 Method Javadoc"返回對象參數的字符串表示形式。""返回對非空參數調用toString的結果,對空參數調用'null'的結果。"Java SE 10 Return Javadoc"如果參數為空,則字符串為“null”;否則,將返回object . tostring()的值.""為非空參數調用toString,為空參數調用“null”的結果"Method Modifierspublic staticpublic staticOverloaded VersionsvalueOf(boolean)

valueOf(char)

valueOf(char[], int, int)

valueOf(double)

valueOf(float)

valueOf(int)

valueOf(long)

valueOf(Object)

在表面上,似乎是string.valueof(Object)和Objects.toString(Object)也做同樣的事情。結果是它們是一樣的。

下面是OpenJDK的Objects.toString(對象)代碼:

OpenJDK: Objects.toString(Object)定義

public static String toString(Object o) {

return String.valueOf(o);

}

上面的代碼片段顯示了Objects.toString(對象)方法只是委託給String.valueOf(對象)方法。接下來將顯示String.valueOf(Object)的OpenJDK實現。

OpenJDK: String.valueOf(Object)定義

public static String valueOf(Object obj) {

return (obj == null) ? "null" : obj.toString();

}

上面的代碼片段顯示,當需要對象的toString()表示而不存在NullPointerException時,可以調用String.valueOf(Object)或object. toString(Object)。選擇一個方法可能有一些次要的原因,我通常選擇對String.valueOf(Object)的直接調用,而不是通過Objects.toString(Object)對該方法的間接調用。

雖然我通常使用string . valueof (Object)而不是Objects.toString(Object),但默認情況下,如果傳入的對象為null,我希望返回字符串“null”時,替代重載方法對象。toString(Object, String)的優點是,如果傳入的對象為null,則指定方法返回的任何字符串。例如,可以使用此方法返回空字符串(“”)、字符串“nil”、字符串“none”或任何其他任意字符串(如果傳入的對象為null)。對象的OpenJDK代碼清單。接下來顯示toString(Object,字符串)。

OpenJDK: Objects.toString(Object, String)定義

public static String toString(Object o, String nullDefault) {

return (o != null) ? o.toString() : nullDefault;

}

關於對象有一點需要注意。toString(Object, String)實現是,如果將null傳遞給該方法作為第二個參數,那麼該方法將返回null(而不是字符串“null”或任何其他字符串)。

方法String.valueOf(Object),Object . tostring(Object)和Object。toString(Object、String串)使提供對象的字符串表示變得容易,而不需要為空編寫顯式檢查。


分享到:


相關文章: