Understanding the Difference Between Null and Empty String

In Groovy, there is a subtle difference between a variable whose value is null and a variable whose value is the empty string.

The value null represents the absence of any object, while the empty string is an object of type String with zero characters. If you try to compare the two, they are not the same.

For example, any code inside the following conditional block will not execute because the value of varA (null) does not equals the value of varB (the empty string).

def varA = null
def varB = '' /* The empty string */
if (varA == varB) {
  // Do something here when varA equals varB
}

Another common gotcha related to this subtle difference is that trying to compare a variable to the empty string does not test whether it is null. For example, the code inside the following conditional block will execute (and cause a NullPointerException at runtime) because the null value of varA is not equal to the empty string:

def varA = null
if (varA != '') {
  // set varB to the first character in varA
  def varB = varA.charAt(0)
}

To test whether a string variable is neither null nor empty, you could explicitly write out both conditions like this:

if (varA != null && varA != '') {
  // Do something when varA is neither null nor empty
}

However, Groovy provides an even simpler way. Since both null and the empty string evaluate to false when interpreted as a boolean, you can use the following instead:

if (varA) {
  // Do something when varA has a non-null and non-empty value
}

If varA is null, the condition block is skipped. The same will occur if varA is equal to the empty string because either condition will evaluate to boolean false. This more compact syntax is the recommended approach.