class Example{
public static void main(String args[]){
int x=99;
if(x ==x){
System.out.println("x ==x : " x); //Why this code line is not run?
}
if( x==x ){
System.out.println(" x==x : " x);
}
}
}
Why isn't the first println statement executed?
CodePudding user response:
The operands of an expression are evaluated left to right.
In the expression x == x, first x is evaluated. It increments x by 1, but returns the original value of x. So x returns 99.
Then x is evaluated, which returns 100 (since it was incremented by x ).
Since 99 is not equal to 100, this condition evaluates to false.
If you change the expression to x==x , you'll get true.
CodePudding user response:
The differece between i and i is very simple.
i- means exactly first get the value and then increment it for the further usagei- means exactly first increment the value and use the incremented value
Following the shippet x == x means following:
- Analyze expression from left to the right
- Get
x = 99as the left operand and use it in the expression - Increment
xand thusx == 100 - Get
x = 100as the right operand (note it is already incremented) 100 != 99
Following the shippet x == x means following:
- Analyze expression from left to the right
- Get
x = 99as the left operand - Increment
xand thusx == 100and use it in the expression - Get
x = 100as the right operand (note it is already incremented) 100 == 100
You can see all these logic. E.g. not experienced developer cannot know these details. Therefore the best practice is to avoid such increments in the expression. Just do it before the expression in the single line. In this case the logic will be straight forward and you get much less problems.
