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)
这将是一个更好的结果.
这里有两个问题:八进制文字和评估顺序.
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)
| 归档时间: |
|
| 查看次数: |
5222 次 |
| 最近记录: |