Bohn
Bohn

Reputation: 26919

Defining Strings as Null is better or as Empty Strings

I come from a C#.net background and whenever I had a string I was declaring it as String.Empty Now I am looking at a Java code from a co-worker and he has declared his strings in a method like this:

String myStr = null;

I don't like it, and even worse, he is assigning values to these strings in an "IF" block where it may or may not even qualify, and then at the end of the method he is calling a myStr.length() on them.

So my question is what is a preferred way in Java? do you think is it better to define them as String.Empty OR leave them as null and do a null check just before calling .length() on them?

Upvotes: 3

Views: 1843

Answers (4)

user207421
user207421

Reputation: 310875

They both have their uses. Empty strings are in-band, i.e. can occur in the input, so they are no use as sentinels. Null is only useful as a sentinel. If you're going to append to it you should initialize it with "" of course. If you're going to immediately reassign it there's no need to provide any value at all, and you should probably combine the declaration with the reassignment. I see far too much of this:

String s = new String();
s = "some string";

All this tells me is that somebody doesn't understand the language.

Upvotes: 4

Esko Luontola
Esko Luontola

Reputation: 73625

In general, using null values is a bad idea, especially if they are returned from a method or passed to another method. Using the Null Object pattern is better, and in a string's case the Null Object is an empty string. By consistently avoiding nulls, the probability of getting a NullPointerException gets smaller and the code becomes more readable (this is discussed at length in Clean Code chapter 7, pages 110-112).

In Java String s = "" does not allocate any memory, because the JVM will have interned the string literal, so there isn't even a performance difference (and even if there were, it would be a premature optimization).

Upvotes: 6

exexzian
exexzian

Reputation: 7890

thought both are applicable for different scenarios, assigning it null will be better(saves memory and less error prone) provided you later on set some string to that else you will be getting a null pointer exception.

Upvotes: 3

rtheunissen
rtheunissen

Reputation: 7435

An empty String is often a sign that you should either be using a StringBuilder if you're appending (which is a common case). A null reference is 'better' because it uses less memory and it's faster to check if a String is null compared to checking if it's empty. I would advice against using empty Strings instead of declaring them as null, though you should still check for null reference before you use it unless you're 100% sure that it would have been assigned a value at some stage.

Upvotes: 2

Related Questions