This is more of a theoretical question to understand Java's evaluation of arithmetic operations. Since +
and -
have the same precedence, I don't quite understand how Java evaluates the following expressions (where there are more than one +
and -
operators between the two operands).
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
}
From the Java 8 Language Specification (§15.8.2):
The binary + operator performs addition when applied to two operands of numeric type, producing the sum of the operands.
The binary - operator performs subtraction, producing the difference of two numeric operands.
[...]
Addition is a commutative operation if the operand expressions have no side effects.
Integer addition is associative when the operands are all of the same type.
What I also noticed, is that everytime the #operators is even, the result is the same and the order doesn't matter.
But when the #operators is odd, this doesn't necessarily influence the result. E.g. in the following two expressions there is one more -
than +
, however the result is different.
System.out.println(a-+-b); // results in 3
System.out.println(a-+-+-b); // results in -1
With all that information I still don't see the pattern or the way how this works.