is there a Java equivalent to null coalescing operator (??) in C#?

JavaC#EquivalentNull Coalescing-Operator

Java Problem Overview


Is it possible to do something similar to the following code in Java

int y = x ?? -1;

More about ??

Java Solutions


Solution 1 - Java

Sadly - no. The closest you can do is:

int y = (x != null) ? x : -1;

Of course, you can wrap this up in library methods if you feel the need to (it's unlikely to cut down on length much), but at the syntax level there isn't anything more succinct available.

Solution 2 - Java

Guava has a method that does something similar called MoreObjects.firstNonNull(T,T).

Integer x = ...
int y = MoreObjects.firstNonNull(x, -1);

This is more helpful when you have something like

int y = firstNonNull(calculateNullableValue(), -1);

since it saves you from either calling the potentially expensive method twice or declaring a local variable in your code to reference twice.

Solution 3 - Java

Short answer: no

The best you can do is to create a static utility method (so that it can be imported using import static syntax)

public static <T> T coalesce(T one, T two)
{
    return one != null ? one : two;
}

The above is equivalent to Guava's method firstNonNull by @ColinD, but that can be extended more in general

public static <T> T coalesce(T... params)
{
    for (T param : params)
        if (param != null)
            return param;
    return null;
}

Solution 4 - Java

No, and be aware that workaround functions are not exactly the same, a true null coalescing operator short circuits like && and || do, meaning it will only attempt to evaluate the second expression if the first is null.

Solution 5 - Java

ObjectUtils.firstNonNull(T...), from Apache Commons Lang 3 is another option. I prefer this becuase unlike Guava, this method does not throw an Exception. It will simply return null;

Solution 6 - Java

Primitives in Java can never be null, so that statement does not make sense conceptually. However, the wrapper classes (Integer, Character, etc.), as well as any other instantiable class can be null.

Besides that fact, there isn't any short-hand syntax for a null coalescing operator. You must use the expanded form.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNikita IgnatovView Question on Stackoverflow
Solution 1 - JavaAndrzej DoyleView Answer on Stackoverflow
Solution 2 - JavaColinDView Answer on Stackoverflow
Solution 3 - Javausr-local-ΕΨΗΕΛΩΝView Answer on Stackoverflow
Solution 4 - JavaAkariAkaoriView Answer on Stackoverflow
Solution 5 - JavamateuscbView Answer on Stackoverflow
Solution 6 - Javahelloworld922View Answer on Stackoverflow