Условный оператор довольно сложен, когда вы смешиваете тип операторов; это тема многих Java Puzzlers .
Вот классический пример:
System.out.println(true ? Integer.valueOf(1) : Double.valueOf(2));
// prints "1.0"!!!
А вот еще один:
System.out.println(true ? '*' : 0); // prints "*"
int zero = 0;
System.out.println(true ? '*' : zero); // prints "42"
И, как вы только что обнаружили:
System.out.println(true ? 1 : null); // prints "1"
System.out.println(false ? 1 : null); // prints "null"
Понять все тонкости условного оператора ?:
может быть довольно сложно. Лучший совет - просто не смешивать типы во втором и третьем операндах.
Следующая цитата является выдержкой из урока Java Puzzlers, Puzzle 8: Dos Equis :
Таким образом, обычно лучше использовать один и тот же тип для второго и третьего операндов в условных выражениях. В противном случае вы и читатели вашей программы должны хорошо понимать сложную спецификацию поведения этих выражений.
JLS ссылки