3 ms·
> Since the empty String is a valid String, and Strinfg.valueOf() also returns a String, what other behavior would you ever imagine being sane or possible? IMH
by avz 10y ago
> Since the empty String is a valid String, and Strinfg.valueOf() also returns a String, what other behavior would you ever imagine being sane or possible?
IMHO, String.valueOf() throwing NPE upon encountering a null reference would be both sane and possible.
Unfortunately, it does indeed appear that it returns "null" instead [1].
[1] https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#valueOf(java.lang.Object) https://docs.oracle.com/javase/7/docs/api/java/lang/String.h...
- samuellb 10y agoOn the other hand, it's quite convenient to not have to do null checks in debug messages. Compare: log.trace("doStuff(" + obj1 + ", " + obj2 + ")"); to this: log.trace("doStuff(" + (obj1 != null ? obj1 : "null") + ", " + (obj2 != null ? obj2 : "null") + ")"); The second one is IMHO quite hard to read, even in this short example (and code readability is important when you do code reviews)
- tomtomtom777 10y agoThat is why you should use string formatting instead of concatenation. For string formatting, rendering "null" (or "") makes sense; for coercion not.
- richardwhiuk 10y agoThat just resolves into everyone always doing formatting, and never doing concatenation, which yields the same problem.