Я хотел бы высказать некоторые сомнения в отношении тернарного оператора в Java.Java тернарный оператор: поведение, подобное условному перемещению (сборка) по ART?
В Java это выглядит так: x = (c? A: b). Из того, что я читал и переживал, он, кажется, выполняется как ветвь if/else, что означает, что оценивается только один оператор (либо a, либо b, но никогда не оба). Я хотел бы знать, всегда ли это так.
В C он может быть скомпилирован в условные ходы, которые оценивают оба выражения a и b.
Чтобы быть точным, я хотел бы знать, верно ли это для Android-кода. Знание того, что байт-код Java фактически переведен на собственные инструкции при установке на устройствах с недавней ОС (см. Android Runtime(ART)). Есть ли риск, что после АРТ появляются условные движения?
Приведем пример. Базовый класс, который будет содержать:
//class content
int victoriesA = 0;
int nonVictoriesA = 0;
int totalCalls = 0;
//...class content
public int getIncrementedCounter(int goalsA,int goalsB){
totalCalls++;
return (goalsA > goalsB ? ++victoriesA : ++nonVictoriesA);
}
public boolean testOpertor(){
return (totalCalls == victoriesA + nonVictoriesA);
}
Если getIncrementedCounter вызывается несколько раз во время выполнения программы, будет функция testOperator всегда возвращает истину? (Предполагается, что код работает на одном потоке)
Я знаю, что я должен просто использовать, если/иначе ветви, чтобы быть уверенным, чтобы выйти из неприятностей, но я до сих пор интересно ....
Благодарим вас за ссылку. – Gordak