В моей книге "Тесты практики" содержится этот вопрос о тройном операторе:
// What is the output of the following application?
public class Transportation {
public static String travel(int distance) {
return(distance < 1000 ? "train" : 10);
}
public static void main(String[] args) {
travel(500);
}
}
Он не компилируется. Ниже приводится объяснение:
Тернарные операции требуют, чтобы оба правых выражения соответствовали типам данных. В этом примере первое правое выражение внешней тройной операции имеет тип String, а второе правое выражение имеет тип int. Поскольку эти типы данных несовместимы, код не компилируется, а вариант C - правильный ответ.
Это действительно причина? Мне кажется, что этот пример не компилируется, потому что 10 не является String, а String - тем, что должен вернуть метод. Я спрашиваю, потому что System.out.println(distance < 1000? "train": 10);
компилируется и работает без проблем.