#java #equality #operator-precedence #post-increment #associativity
#java #равенство #оператор-приоритет #пост-инкремент #ассоциативность
Вопрос:
Пожалуйста, кто-нибудь может помочь мне понять, почему равенство имеет более высокий приоритет перед postfix здесь?
int x = 6;
System.out.println(7 == x );
Вывод: false
Согласно некоторым источникам приоритета операторов в Java: postfix должен иметь более высокий приоритет, чем оператор равенства. В этих источниках также упоминается ассоциативность операторов (но она должна появляться, когда уровень приоритета операторов в выражениях одинаков).
Ответ №1:
Если бы приоритет равенства был выше, чем у приращения postfix , то 7 == x
он был бы проанализирован как записанный (7 == x)
. Это, конечно, не то, что происходит, поскольку не
может быть применено к логическому значению, которое 7 == x
и будет производить. Оно также не может быть применено к выражению, которое не является переменной. Таким образом, безусловно, выражение анализируется как записанное 7 == (x )
; оператор postfix имеет более высокий приоритет.
Что вас смущает, так это то, что результат сравнения равен false , но этого следовало ожидать. Это слишком ожидаемо, потому что значение postfix increment ( x
) является значением переменной до ее увеличения. x
безусловно, увеличивается, и оно увеличивается до выполнения сравнения равенства, но сравнение не между 7 и значением x
. Это между 7 и значением, возвращаемым x
, которое равно 6 (старое значение x
).
Если бы вы написали 7 == x
, используя оператор увеличения префикса, тогда это сработало бы так, как вы ожидали, потому что оператор увеличения префикса возвращает новое значение переменной. Вот почему у нас есть два разных оператора приращения: иногда вы хотите использовать старое значение (постфиксный оператор), а иногда вы хотите использовать новое значение (префиксный оператор).
Ответ №2:
Как следует из названия postincrement , приращение происходит после присваивания. Таким образом, 7 == x
оценивается как
7 == x
x = x 1
В отличие от этого, с предварительным увеличением, 7 == x
оценивается как
x = x 1
7 == x
ДЕМОНСТРАЦИЯ:
public class Main {
public static void main(String[] args) {
int x = 6;
System.out.println(7 == x);
}
}
Вывод:
true