Java:两个整数的总和被打印为两者的串联

gir*_*iri 5 java

int x = 17;
int y = 013;
System.out.println("x+y = " + x + y);
Run Code Online (Sandbox Code Playgroud)

当我运行程序时,我得到输出1711.任何人都可以告诉我如何获得1711

Car*_*rum 11

17是有直接.

013是一个等于11十进制的八进制常量.

013 = 1*8 + 3*1 = 8 + 3 = 11
Run Code Online (Sandbox Code Playgroud)

在字符串后添加在一起时,它们将串联为字符串,而不是作为数字添加.

我想你想要的是:

int x = 17;
int y = 013;
int z = x + y;

System.out.println("x+y = " + z);
Run Code Online (Sandbox Code Playgroud)

要么

System.out.println("x+y = " + (x + y));
Run Code Online (Sandbox Code Playgroud)

这将是一个更好的结果.

  • 而不是定义新变量,你可以使用(x + y) (3认同)

pol*_*nts 8

这里有两个问题:八进制文字和评估顺序.

int y = 013相当于int y = 11,因为基数8中的13是基数10中的11.

对于评估顺序,+操作员从左到右进行评估,因此"x+y = " + x+y相当于("x+y = " + x)+y,而不是"x+y = " + (x+y).在Java中,空格是微不足道的.

请看下面的图表(s.c.字符串连接,a.a.是算术加法):

("x+y = " + x)+y
          |   |
     (1) s.c  |
              |
             s.c. (2)


"x+y = " + (x+y)
         |   |
         |  a.a. (1)
         |
        s.c. (2)
Run Code Online (Sandbox Code Playgroud)

在这两个图中,(1)发生在之前(2).

如果没有parantheses,编译器将从左到右进行评估(根据优先级规则).

 "x+y = " + x+y
          |  |
         (1) |
             |
            (2)
Run Code Online (Sandbox Code Playgroud)