I just announced the new Spring Boot 2 material, coming in REST With Spring:

>> CHECK OUT THE COURSE

1. Overview

The ternary conditional operator ?: allows us to define expressions in Java. It’s a condensed form of the if-else statement that also returns a value.

In this tutorial, we’ll learn when and how to use a ternary construct. We’ll start by looking at its syntax followed by exploring its usage.

2. Syntax

The ternary operator ?: in Java is the only operator which accepts three operands:

booleanExpression ? expression1 : expression2

The very first operand must be a boolean expression, the second and the third operands can be any expression that returns some value. The ternary construct returns expression1 as an output if the first operand evaluates to true, expression2 otherwise.

3. Example

Let’s consider the below if-else construct:

int num = 8;
String msg = "";
if(num > 10) {
    msg = "Number is greater than 10";
}
else {
    msg = "Number is less than or equal to 10";
}

In the above code, we have assigned a value to msg based on the conditional evaluation of num. We can make this code more readable and safe by easily replacing the if-else statement with a ternary construct:

final String msg = num > 10 
  ? "Number is greater than 10" 
  : "Number is less than or equal to 10";

4. Expression Evaluation

When using a Java ternary construct, only one of the right-hand side expressions i.e. either expression1 or expression2 is evaluated at runtime.

We can test that out by writing a simple JUnit test case:

@Test
public void whenConditionIsTrue_thenOnlyExpression1IsEvaluated() {
    int exp1 = 0, exp2 = 0;
    int result = 12 > 10 ? ++exp1 : ++exp2;
    
    assertThat(exp1).isEqualTo(1);
    assertThat(exp2).isEqualTo(0);
    assertThat(result).isEqualTo(1);
}

Our boolean expression 12 > 10 always evaluates to true, so the value of exp2 remained as-is. Similarly, let’s consider what happens for a false condition:

@Test
public void whenConditionIsFalse_thenOnlyExpression2IsEvaluated() {
    int exp1 = 0, exp2 = 0;
    int result = 8 > 10 ? ++exp1 : ++exp2;

    assertThat(exp1).isEqualTo(0);
    assertThat(exp2).isEqualTo(1);
    assertThat(result).isEqualTo(1);
}

The value of exp1 remained untouched, and the value of exp2 was incremented by 1.

5. Nesting Ternary Operator

It’s possible for us to nest our ternary operator to any number of levels of our choice. So the construct:

String msg = num > 10 ? "Number is greater than 10" : 
  num > 5 ? "Number is greater than 5" : "Number is less than equal to 5";

is valid in Java. To improve the readability of the above code, we can use braces (), wherever necessary:

String msg = num > 10 ? "Number is greater than 10" 
  : (num > 5 ? "Number is greater than 5" : "Number is less than equal to 5");

However, please note that it’s not recommended to use such deeply nested ternary constructs in the real world. This is so as it makes the code less readable and difficult to maintain.

6. Conclusion

In this quick tutorial, we learned about the ternary operator in Java. It isn’t possible to replace every if-else construct with a ternary operator. However, it’s a great tool for some cases and makes our code much shorter and readable.

As usual, the entire source code is available over on Github.

I just announced the new Spring Boot 2 material, coming in REST With Spring:

>> CHECK OUT THE LESSONS

Leave a Reply

avatar
  Subscribe  
Notify of