Summary: in this tutorial, you will learn about the Java ternary operator and how to use it to make your code more concise.
Introduction to the Java ternary operator
The ternary operator, represented as ?:
is a concise way to express if-else statements.
The ternary operator evaluates a condition and returns a value if the condition is true and another value if the condition is false.
The syntax of the Java ternary operator is as follows:
<span><code class="hljs language-java">condition ? valueIfTrue : valueIfFalse;</code></span><small class="shcb-language" id="shcb-language-1"><span class="shcb-language__label">Code language:</span> <span class="shcb-language__name">Java</span> <span class="shcb-language__paren">(</span><span class="shcb-language__slug">java</span><span class="shcb-language__paren">)</span></small>
In this syntax:
condition
is a boolean expression that can be true or false.valueIfTrue
is a return value if the condition is true.valueIfFalse
is a return value if the condition is false.
The operator ?:
is called a ternary operator because it accepts three operands. The ternary operator is also known as a conditional operator.
Typically, you assign the return value of the ternary operator to a variable like this:
<span><code class="hljs language-java">variable = condition ? valueIfTrue : valueIfFalse;</code></span><small class="shcb-language" id="shcb-language-2"><span class="shcb-language__label">Code language:</span> <span class="shcb-language__name">Java</span> <span class="shcb-language__paren">(</span><span class="shcb-language__slug">java</span><span class="shcb-language__paren">)</span></small>
It is equivalent to the following:
<span><code class="hljs language-java"><span class="hljs-keyword">if</span> (condition) { variable = valueIfTrue; } <span class="hljs-keyword">else</span> { variable = valueIfFalse; }</code></span><small class="shcb-language" id="shcb-language-3"><span class="shcb-language__label">Code language:</span> <span class="shcb-language__name">Java</span> <span class="shcb-language__paren">(</span><span class="shcb-language__slug">java</span><span class="shcb-language__paren">)</span></small>
For example, the following program uses an if-else statement to find the maximum value of two values:
<span><code class="hljs language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">App</span> </span>{ <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{ <span class="hljs-keyword">int</span> x = <span class="hljs-number">10</span>, y = <span class="hljs-number">20</span>; <span class="hljs-keyword">int</span> max; <span class="hljs-keyword">if</span> (x > y) { max = x; } <span class="hljs-keyword">else</span> { max = y; } System.out.println(max); } }</code></span><small class="shcb-language" id="shcb-language-4"><span class="shcb-language__label">Code language:</span> <span class="shcb-language__name">Java</span> <span class="shcb-language__paren">(</span><span class="shcb-language__slug">java</span><span class="shcb-language__paren">)</span></small>
Output:
<span><code class="hljs">20</code></span>
To make the code more concise, you can use the ternary operator as follows:
<span><code class="hljs language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">App</span> </span>{ <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{ <span class="hljs-keyword">int</span> x = <span class="hljs-number">10</span>, y = <span class="hljs-number">20</span>; <span class="hljs-keyword">int</span> max = x > y ? x : y; System.out.println(max); } }</code></span><small class="shcb-language" id="shcb-language-5"><span class="shcb-language__label">Code language:</span> <span class="shcb-language__name">Java</span> <span class="shcb-language__paren">(</span><span class="shcb-language__slug">java</span><span class="shcb-language__paren">)</span></small>
In this example, the whole if-else
statement consists of 6 lines of code:
<span><code class="hljs language-java"><span class="hljs-keyword">int</span> max; <span class="hljs-keyword">if</span> (x > y) { max = x; } <span class="hljs-keyword">else</span> { max = y; }</code></span><small class="shcb-language" id="shcb-language-6"><span class="shcb-language__label">Code language:</span> <span class="shcb-language__name">Java</span> <span class="shcb-language__paren">(</span><span class="shcb-language__slug">java</span><span class="shcb-language__paren">)</span></small>
was replaced by a single line of code that uses the ternary operator:
<span><code class="hljs language-java"><span class="hljs-keyword">int</span> max = x > y ? x : y;</code></span><small class="shcb-language" id="shcb-language-7"><span class="shcb-language__label">Code language:</span> <span class="shcb-language__name">Java</span> <span class="shcb-language__paren">(</span><span class="shcb-language__slug">java</span><span class="shcb-language__paren">)</span></small>
As you can see, the ternary operator does make your code more concise and expressive.
Nested ternary operator
Technically, Java allows you to nest a ternary operator. The valueIfTrue
and/or valueIfFalse
can be replaced with a nested ternary operator.
For example, the following replaces the valueIfTrue
and valueIfFalse
by two other nested ternary operators:
<span><code class="hljs language-java">condition ? (condition2 ? value2IfTrue : value2IfFalse) : (condition3 ? value3IfTrue : value3IfFalse);</code></span><small class="shcb-language" id="shcb-language-8"><span class="shcb-language__label">Code language:</span> <span class="shcb-language__name">Java</span> <span class="shcb-language__paren">(</span><span class="shcb-language__slug">java</span><span class="shcb-language__paren">)</span></small>
The following program illustrates how to use the nested ternary operators to find the maximum number of three numbers:
<span><code class="hljs language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">App</span> </span>{ <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{ <span class="hljs-keyword">int</span> x = <span class="hljs-number">10</span>, y = <span class="hljs-number">20</span>, z = <span class="hljs-number">30</span>; <span class="hljs-keyword">int</span> max = x > y ? (x > z ? x : z): (y > z ? y : z); System.out.println(max); } }</code></span><small class="shcb-language" id="shcb-language-9"><span class="shcb-language__label">Code language:</span> <span class="shcb-language__name">Java</span> <span class="shcb-language__paren">(</span><span class="shcb-language__slug">java</span><span class="shcb-language__paren">)</span></small>
Output:
<span><code class="hljs">30</code></span>
The program first compares x with y. If x is greater than y, it compares x with z. Otherwise, it compares y with z. Finally, it returns the maximum value between x, y, and z.
In practice, you should avoid using the nested ternary operators because they make your code difficult to understand.
Summary
- Java ternary operator returns a value if a condition is true and another value if the condition is false.
- Use the ternary operator to make your code more concise.
- Avoid using nested ternary operators that make your code more difficult to understand. Readability counts.