Reputation: 390
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
?
Upvotes: 9
Views: 9541
Reputation: 718768
Why is it better that
Boolean.valueOf(String s)
returnsfalse
in the case ofs
beingnull
, rather than returningnull
?
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).
Upvotes: 6
Reputation: 62864
Why is it better that
Boolean.valueOf(String s)
returnsfalse
in the case ofs
beingnull
, rather than returningnull
?
Because out the build-in feature in Java, called autoboxing.
Let's suppose that Boolean.valueOf(String s)
was actually returning null
, when s
is null
. Then, the following statement would be throwing NullPointerException
, because null
cannot be assigned to a primitive:
boolean b = Boolean.valueOf(null);
Upvotes: 7
Reputation: 393781
You can use the ternary operator :
String s = ...
Boolean b = s != null ? Boolean.valueOf(s) : null;
Upvotes: 2