您会推荐哪种方式将 Java 对象转换String
为,为什么?
例如,假设我们有:
StringBuilder sb = new StringBuilder();
我们可以通过String
两种方式将其转换为。第一的:
sb.toString();
第二:
sb + "";
第一个是首选,因为它更常用且更有效。
如果字符串不为空,您只会使用第二个(在这种情况下,您应该将其附加到 StringBuilder)
第二个例子更昂贵,因为它与
new StringBuilder().append(sb.toString()).append("").toString();
从技术上讲,它可以做到这一点。
new StringBuilder().append(String.valueOf(sb)).append("").toString();
区别在于 String.valueOf(null) => "null" 而不是 NPE。
someObject.toString()
和之间的主要区别在于someObject + ""
someObject 是否为 null:前者会抛出 NullPointerException 而后者不会(它将返回“null”)。
如果您希望您的对象不为空,那么:
String s = someObject.toString();
节省了不必要的连接(编译器可能会或可能不会删除)。
但是,如果对象可以为 null 并且它是可接受的值,我宁愿选择:
String.valueOf(someObject);
在此示例中,如果someObject
为 null,它将返回“null”并且不会引发异常。
正如@Peter Lawrey 提到的,第一个更常用于字符串生成器。但是,当转换为字符串时,最好这样做......
(String) myVariable;
而不是...
myVariable.toString();
这样做的原因是第二个可能会引发空指针异常。
还有第三种可能:
Objects.toString(Object o, String nullDefault)
如果第一个参数是 ,则返回第二个参数null
,
否则o.toString()
返回。
(还有Objects.toString(Object o)
,返回与 相同String.valueOf
)