Это скорее теоретический вопрос, чтобы понять, как Java оценивает арифметические операции. Поскольку +
и -
имеют одинаковый приоритет, я не совсем понимаю, как Java оценивает следующие выражения (где между двумя операндами более одного оператора +
и -
).
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(a+-b); // results in -1
System.out.println(a-+b); // results in -1
System.out.println(a+-+b); // results in -1
System.out.println(a-+-b); // results in 3
System.out.println(a-+-+b); // results in 3
System.out.println(a+-+-b); // results in 3
System.out.println(a-+-+-b); // results in -1
System.out.println(a+-+-+b); // results in 3
}
Из спецификации языка Java 8 (§15.8.2):
Двоичный оператор + выполняет сложение при применении к двум операндам числового типа, получая сумму операндов.
Двоичный оператор - выполняет вычитание, получая разность двух числовых операндов.
[...]
Сложение является коммутативной операцией, если выражения операндов не имеют побочных эффектов.
Целочисленное сложение является ассоциативным, если все операнды одного типа.
Что я также заметил, так это то, что каждый раз, когда операторы # четные, результат один и тот же, а порядок не имеет значения. Но когда операторы # нечетные, это не обязательно влияет на результат. Например. в следующих двух выражениях -
больше, чем +
, но результат другой.
System.out.println(a-+-b); // results in 3
System.out.println(a-+-+-b); // results in -1
Со всей этой информацией я до сих пор не вижу закономерности или того, как это работает.
--
и++
в этом случае не допускаются, потому что Java воспринимает это как операцию увеличения/уменьшения - person ncw   schedule 06.11.2016