Understanding Groovy's Null-Safe Comparison Operators

It's important to know that Groovy's comparison operators == and != handle nulls gracefully so you don't have to worry about protecting null values in equality or inequality comparisons.

Furthermore, the >, >=, <, and <= operators are also designed to avoid null-related exceptions, however you need to be conscious of how Groovy treats null in these order-dependent comparisons. Effectively, a null value is "less than" any other non-null value in the natural ordering, so for example observe the following comparison results.

Examples of How null Is Less Than Everything

Left-Side Expression

Operator

Right-Side Expression

Comparison Result

'a'

>

null

true

'a'

<

null

false

100

>

null

true

100

<

null

false

-100

>

null

true

-100

<

null

false

now()

>

null

true

now()

<

null

false

now() - 7

>

null

true

now() - 7

<

null

false

If you want a comparison to treat a null-valued field with different semantics — for example, treating a null MaximumOverdraftAmount field as if it were zero (0) like a spreadsheet user might expect — then use the nvl() function as part of your comparison logic as shown in the following example:

// Change default comparison semantics for the MaximumOverdraftAmount custom field in
// case its value is null by using nvl() to treat null like zero (0)
if (nvl(MaximumOverdraftAmount,0) < -2000) {
  // do something for suspiciously large overdraft amount
} 

As illustrated by the table above, without the nvl() function in the comparison any MaximumOverdraftAmount value of null would always be less than -2000 — since by default null is less than everything.