Java: sum of two integers being printed as concatenation of the two

前端 未结 10 2053
忘了有多久
忘了有多久 2020-12-03 19:41

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

10条回答
  •  我在风中等你
    2020-12-03 19:41

    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)
    

提交回复
热议问题