L'opérateur ternaire permet de poser une structure conditionnelle compacte à trois opérandes.

Type variable
variable = Condition ? Expression_1 : Expression_2;
// est équivalent à 
if (Condition) 
  { Expression_1; }
else
  { Expression_2; }

L'opérateur ternaire utilise l'expression conditionnelle retournant true ou false, pour déterminer laquelle des deux expressions doit être exécutée.

L'opérateur ternaire fonctionne comme une instruction if... else. Si la condition initiale renvoie true, alors la première instruction est éxécutée sinon la deuxième est activée.

String message = (jour == "Lundi") ? "Bonne reprise du travail !"
                         : "Bonne continuation !";

float Prix;
float difference = (Prix >= 100) ? Prix - 100 : 100 - Prix;

Le type du résultat de l'instruction ternaire est du même type que celui des expressions sous certaines conditions :

  • La promotion numérique s'assure de rendre compatible le type des deux expressions. Par exemple, si l'une des opérandes est du type byte, short ou char et l'autre de type int, alors le résultat sera de type int.
  • Par contre, si l'une des opérandes est une expression constante du type int et l'autre du type byte, short ou char, alors le résultat sera l'un de ces derniers types précités.
  • De même, si l'une des expressions est du type byte et l'autre short, alors le type du résultat sera short.
  • Si les deux expressions sont d'un type référence distinct et compatible, alors le résultat sera du type représentant la superclasse.
  • Si l'une des expressions est d'un type référence et l'autre un type null, alors le résultat sera du type référence précité.
  • Si les deux expressions possèdent un type identique, y compris null, alors le résultat sera de ce type.
SuperClasse obj_1 = new SuperClasse();
Classe obj_1 = new Classe();
SuperClasse res = i > 0 ? obj_1 : obj_2;

byte taille_1;
short taille_2;
short res = t == 100 ? taille_1 : taille_2;