便捷的方法String.valueOf(Object) 自JDK 1.0起就存在,并且是我经常使用的JDK提供的方法之一。 我以前曾在博客上评论过它的价值 。 JDK 1.7引入了 Objects类 ,其中包括Objects.toString(Object)方法。 这篇文章比较了这两种听起来相似的方法。
这两个方法String.valueOf(Object)和Objects.toString(Object)本质上都做相同的事情:如果传入的对象不为null则调用它的toString()方法;如果将null传递给它们,则返回字符串“ null” 。 简而言之,这两种方法都旨在提供一种简单的方法来调用对象的toString()而不必担心如果结果为null NullPointerException 。
下表比较了String.valueOf(Object)和Objects.toString(Object) 。
| 特性 | String.valueOf(Object) | Objects.toString(Object) |
|---|---|---|
| Java SE 10方法Javadoc | “ 返回Object参数的字符串表示形式。 “ | “ 返回调用toString用于非结果null论证和‘空’的null参数。 “ |
| Java SE 10返回Javadoc | “如果参数为null ,则字符串等于“ null”; 否则,将返回obj.toString()的值。” | “打电话的结果toString一个非null空‘的说法和’ null的说法” |
| 方法修饰符 | public static | public static |
| 重载版本 | valueOf(布尔值) valueOf(字符) valueOf(char [],int,int) valueOf(双) valueOf(float) valueOf(int) valueOf(long) valueOf(对象) | toString(Object) toString(Object,String) |
从表面上看, String.valueOf(Object)和Objects.toString(Object)似乎做同样的事情。 事实证明它们是相同的。 这是来自OpenJDK的Objects.toString(Object)的代码:
OpenJDK: Objects.toString(Object)定义
public static String toString(Object o) {return String.valueOf(o);
} 上面的代码片段显示Objects.toString(Object)方法只是委托给String.valueOf(Object)方法。 接下来显示String.valueOf(Object)的OpenJDK实现。
OpenJDK: String.valueOf(Object)定义
public static String valueOf(Object obj) {return (obj == null) ? "null" : obj.toString();
} 上面的代码片段显示,当需要使用对象的toString()表示形式时,可以调用String.valueOf(Object)或Objects.toString(Object)而没有NullPointerException风险。 可能有较小的理由偏爱另一个,我通常选择直接调用String.valueOf(Object)不是通过Objects.toString(Object)对该方法的间接调用。
虽然我通常在默认情况下使用String.valueOf(Object) [而不是Objects.toString(Object) ],但如果传入的对象为null时,我希望返回字符串“ null”,则替代重载方法Objects.toString(Object,字符串)的优点是,如果传入的对象为null ,则允许用户指定要由该方法返回的任何字符串。 因此,例如,如果传入的对象为null ,则可以使用此方法返回空字符串( "" ),字符串“ nil”,字符串“ none”或任何其他任意字符串。 接下来显示Objects.toString(Object, String)的OpenJDK代码清单。
OpenJDK: Objects.toString(Object, String)定义
public static String toString(Object o, String nullDefault) {return (o != null) ? o.toString() : nullDefault;
} 关于Objects.toString(Object, String)实现的注意事项是,如果将null传递给此方法作为第二个参数,则该方法将返回null (而不是字符串“ null”或任何其他字符串) 。
使用String.valueOf(Object) , Objects.toString(Object)和Objects.toString(Object, String)可以轻松提供对象的字符串表示形式,而无需编写显式检查null 。
翻译自: https://www.javacodegeeks.com/2018/08/valueofobject-tostringobject.html