便捷的方法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