Consider this code:
int x = 17;
int y = 013;
System.out.println(\"x+y = \" + x + y);
When I run this code I get the output 1711. Can anybod
There are two issues here: octal literal, and order of evaluation.
int y = 013 is equivalent to int y = 11, because 13 in base 8 is 11 in base 10.
For order of evaluation, the + operator is evaluated left to right, so "x+y = " + x+y is equivalent to ("x+y = " + x)+y, not "x+y = " + (x+y). Whitespaces are insignificant in Java.
Look at the following diagram (s.c. is string concatenation, a.a. is arithmetic addition):
("x+y = " + x)+y
| |
(1) s.c |
|
s.c. (2)
"x+y = " + (x+y)
| |
| a.a. (1)
|
s.c. (2)
In both diagrams, (1) happens before (2).
Without the parantheses, the compiler evaluates left-to-right (according to precedence rules).
"x+y = " + x+y
| |
(1) |
|
(2)