Тернарный оператор и не ясная логика
Какие-то сложности с тернарным оператором постоянно.
Таким образом оператор не работает.
Path.of(str).isAbsolute() ? System.out.println(Path.of(str).toAbsolutePath()) : System.out.println(Path.of(str));
А вот таким работает.
if (Path.of(str).isAbsolute()) {
System.out.println(Path.of(str).toAbsolutePath());
} else {
System.out.println(Path.of(str));
}
Получается, что он должен постоянно что-то возвращать, т.е. работать только с return ?
Хотя вот так получается норм?
System.out.println((Path.of(str).isAbsolute() ? Path.of(str).toAbsolutePath() : Path.of(str)));
А в чем собственно разница? По факту логика идентична.
условие ? результат 1 : результат 2
т.е. полученный результат нужно обязательно чему-то присвоить или куда-то положить или вернуть, иначе тернарный оператор работать не может?
Ответы (1 шт):
Тернарный оператор предназначен для работы одной переменной, которой по условию нужно присвоить два разных числовых значения. В этом случае операции сравнения и условных переходов не создаётся, в место этого применяется магия математики, и код на асме становится линейным. Адрес переменной может быть длинным, присвоение будет после математики. Пример:
x = a < 0 ? 1: 0;
Магия:
x = a >> ((sizeof a) * 8 - 1); // реально одна команда на асме!!
Однако вариант:
if (a < 0) x = 1; else x = 0;
Будет использовать операторы сравнения и условное исполнение в коде на асме, в обратную сторону оптимизация не работает.