Итак, результат этой функции равен 0. Это возможно только в том случае, если Java обновляет значения после всего оператора, предшествующего ';'. завершилось. Если это так, то какой смысл иметь операцию равенства? Разве это не должно соответствовать z =x +y-(x+y);
class HelloWorld {
public static void main(String[] args) {
int x = 10;
int y = 20;
int z = x += y -= x += y;
System.out.println(z);
}
}
Я запустил код и вот что я смог сделать. Я пытался поискать, верен ли мой вывод, но ничего не нашел по этому поводу?
Обновлено: Мой вопрос: почему мы используем значение x = 10 во всех следующих выражениях, когда x+=y в конечном итоге обновит значение x до 30?
z = 10 + (20 - (10 + 20) => z = 10 + (20 - 30) => z = 10 + (-10) => z = 10 - 10 => z = 0. Я не вижу здесь никакой проблемы. Подробнее об ассоциативности операторов в Java читайте здесь: javatpoint.com/associativity-of-operators-in-javaсамый важный момент: не пишите такой код; второе: проверьте спецификацию языка Java 15.7. Порядок оценки и 15.26.2. Составные операторы присваивания ||| это выражение можно записать как int z = (x += (y -= (x += y)));
@user85421 user85421 К сожалению, я могу проголосовать за ваш комментарий только один раз.
Я не совсем понимаю, в чем смысл этого вопроса.
@EJoshuaS-StandwithUkraine Какой смысл в знаке равенства, если значение будет обновляться только после завершения обновления всего выражения?
Очень немногие используют эти операторы в середине выражения. Это затрудняет чтение и понимание выражений. Обычно он используется для отдельных утверждений, таких как x +=y; вместо x= x+y;. Это остаток от C.
«почему мы используем значение x = 10»: ответ дан в первой ссылке Я уже писал ранее: «Если оператор является составным оператором присваивания (§15.26.2), то оценка левого Операнд -hand включает в себя как запоминание переменной, которую обозначает левый операнд, так и выборку и сохранение значения этой переменной для использования в подразумеваемой двоичной операции». и, например, в a += b -= c (или a += (b -= c)) результат является результатом +=, поэтому Java запоминает значение a и затем вычисляет b -= c




В Java «сначала вычисляется левый операнд». Это означает, что приведенное выше выражение будет решено следующим образом:
int z = (x = x + (y = y - (x = x + y)));
int z = (x = 10 + (y = y - (x = x + y)));
int z = (x = 10 + (y = 20 - (x = x + y)));
int z = (x = 10 + (y = 20 - (x = 10 + 20)));
int z = (x = 10 + (y = 20 - (30)));
х станет 30.
int z = (x = 10 + (-10));
х станет 30. у станет -10.
интервал г = (х = 0);
х станет 0. у станет -10.
интервал г = 0; z станет 0;
Исправьте отступы.