由于在is (抛出 a )myObject.toString()
时失败,所以更安全地 do ,因为它本质上是在 do ,它不会失败,而是会导致 String 。myObject
null
NullPointerException
myObject+""
String.valueOf(myObject).concat("")
"null"
然而,这是一个好习惯吗?我的第一个想法是它似乎可能需要更长的时间来执行,因为它隐式调用了两个方法,但它确实有助于保证软件不会崩溃。
由于在is (抛出 a )myObject.toString()
时失败,所以更安全地 do ,因为它本质上是在 do ,它不会失败,而是会导致 String 。myObject
null
NullPointerException
myObject+""
String.valueOf(myObject).concat("")
"null"
然而,这是一个好习惯吗?我的第一个想法是它似乎可能需要更长的时间来执行,因为它隐式调用了两个方法,但它确实有助于保证软件不会崩溃。
你当然可以myObject+""
。但正如您已经知道的那样,这需要一些额外的方法调用。这将取决于您使用它的应用程序。额外的方法调用会成为应用程序的瓶颈吗?我想这很少是一个问题。或者,为了避免额外的方法调用,您可以直接使用String#valueOf()
method. 但这取决于你想如何处理null
s. 在这种情况下,我当然不会正常进行。至少记录一条指示null
引用的消息。
此外,如果您已经在使用 Java 7,那么您可以使用为您Objects.toString(Object)
处理的方法null
。同样,该方法返回"null"
引用null
。
所以,现在是你的电话。我给了你一些选择。您可能想要抛出异常、记录消息并继续使用"null"
字符串或一些默认字符串,例如""
.
如果您想要这种行为,String.valueOf(myObject)
请在减少 hacky 的同时获得相同的效果。但这也意味着null
字符串和字符串"null"
被同等对待。通常最好明确检查空值,除非您只是打印到日志等。但在这些情况下,大多数方法都采用对象引用并为您处理空值(例如 System.out.println、大多数日志框架等)