由于myObject.toString()
myObject
为null
(引发NullPointerException
)时myObject+""
失败,因此执行String.valueOf(myObject).concat("")
会更安全,因为它基本上是"null"
},但不会失败,而是会导致字符串{{1}}。
然而,这是一个好习惯吗?我的第一个想法是,似乎可能需要更长时间才能执行,因为它隐含地调用了两种方法,但它确实有助于保证不会崩溃。
答案 0 :(得分:8)
你当然可以做myObject+""
。但正如您已经知道的那样,这需要一些额外的方法调用。这将取决于您正在使用它的应用程序。这个额外的方法调用是否会成为应用程序的瓶颈?我想这很少是一个问题。或者,为了避免额外的方法调用,您可以直接使用String#valueOf()
方法。但这取决于你想要处理null
的方式。在这种情况下,我肯定不会正常进行。至少记录一条指示null
参考的消息。
此外,如果您已经使用Java 7,那么您可以使用Objects.toString(Object)
方法为您处理null
。同样,该方法为"null"
引用返回null
。
所以,现在是你的电话。我给了你一些选择。您可能希望抛出异常,日志消息并继续使用"null"
字符串或某些默认字符串,如""
。
答案 1 :(得分:3)
如果你想要这种行为,那么String.valueOf(myObject)
会让你变得不那么黑客。但这也意味着null
字符串和字符串"null"
被视为相同。通常最好明确检查空值,除非您只是打印到日志等。但在这些情况下,大多数方法都会使用Object引用并为您处理空值(例如System.out.println,大多数日志框架等)。