How to convert String to Boolean in Java, but to treat null differently than false?

boolean, java

Solution

Why is it better that `Boolean.valueOf(String s)` returns `false` in the case of `s` being `null`, rather than returning `null`?

It is a matter of opinion, and (to be frank) pointless to ask ... unless you happen to be designing your own language and runtime libraries. The design decision was made more than 20 years ago, and there is zero chance that it will be changed while the language is called "Java".

The javadocs for `Boolean.valueOf(String)` don't offer any clues as to why the designers designed it this way.

However, it is clear that the behavior of `Boolean.valueOf(String)` is inconsistent with the behavior of `valueOf(String)` for the other primitive wrapper classes. For example `Integer.valueOf(String)` throws `NumberFormatException` if the string argument is `null`. So it is possible that the real explanation is that the `Boolean.valueOf(String)` semantics are just an unfortunate anomaly that is the result of an oversight that occurred in the rush to release Java 1.0.

However, that is speculation. For a real answer you would need to consult relevant internal Sun / Oracle documentary sources (if they still exist) and / or talk to someone on the original Java team (if they can still remember).

Problem

I was wondering if there is a straightforward way (one-line, without creating a function) to convert `String` to `Boolean` in Java, but in a way that `Boolean` is `null` if `String` is `null`. If I see it correctly, all of the methods from the `Boolean` class are returning `false` if the input string is `null`. Why is that? Why is it better that `Boolean.valueOf(String s)` returns `false` in the case of `s` being `null`, rather than returning `null`?

Original source