I was wondering, what does the -->--
operator do in Java?
For example, if I have the following code:
int x = 3;
int y = 3;
if (x -->-- y) {
return true;
}
This always returns true.
Thank you!
Left shift operator shifts the bits of the number towards left a specified number of positions. The symbol for this operator is <<.
Using += in Java Loops The += operator can also be used with for loop: for(int i=0;i<10;i+=2) { System. out. println(i); } The value of i is incremented by 2 at each iteration.
Operator in Java is a symbol that is used to perform operations. For example: +, -, *, / etc.
In Java, -->--
is not actually an operator.
What you wrote is actually if ((x--) > (--y))
.
And, as we know from this answer, the --y is predecrement, while the x-- is postdecrement, so therefore, this is basically if (3 > 2)
, which always returns true
.
Positcrement and preicrement are very similar operators. Java's bytecode gives a better understanding. Each of them consists of two operations. Load variable and increment it. The only difference is in the order of this operations. If statement from your case is compiled this way:
4: iload_1 //load x
5: iinc 1, -1 //decrement x
8: iinc 2, -1 //decrement y
11: iload_2 //load y
12: if_icmple 23 //check two values on the stack, if true go to 23rd instruction
When JVM comes up to an if statement it has 3
and 2
on the stack. Line 4 and 5 are compiled from x--
. Lines 8 and 11 from --y
. x
is loaded before increment and y
after.
BTW, it's strange that javac does not optimize out this static expression.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With