class T {
public static void main(String args[]) {
int x = 0;
x = x++;
System.out.println(x);
}
}
为什么输出为0?
回答
因为++
是“后增量”运算符 - 它在之前返回变量的值,它会增加。
的步骤是:
- 取
i
值(增加前),并记住它 - 增量
i
- 分配的记忆值
i
感谢RichieHindle!很好的解释 ! – user989093
@ user989093务必在最适合您的问题的答案上使用绿色复选标记。 –
因为POST增量运算符返回一个时间值(x
的当前值),然后递增x。
试试这样说:
class T {
public static void main(String args[]) {
int x = 0;
x = ++x;
System.out.println(x);
}
}
或者只是'x ++',没有'x ='部分。 :) – Dougal
由于您使用后缀++
运营商,这意味着它在转让之后进行评估。因此首先对x = x
进行评估,因此x
保持为0
,然后对x++
进行评估,但结果未分配给任何内容。
你可以使用前缀++
操作来实现你想要的结果:x = ++x;
从docs:
递增/递减运营商可以之前(前缀)或之后 应用(后缀)操作数。代码结果++;和++结果;将 两端的结果加1。唯一的区别是 前缀版本(++结果)评估为递增值, 而后缀版本(结果++)评估为原始 值。
x++
返回零,然后增加x。这是0.
x = x++;
x = x++
设置x
(它已递增之后)的x++
返回值的分配,相当于
temp = x;
x = x + 1;
x = temp;
这就是为什么输出为零。
该算子被称为后增加算子。 与增量后操作符相关的其他操作符是,每增量操作符。
x = ++x;
如果你申请每递增输出为1
因为++后添加的程序运行后。您可以通过以下两种方式
class T {
public static void main(String args[]) {
int x = 0;
x = ++x;
System.out.println(x);
}
}
或
class T {
public static void main(String args[]) {
int x = 0;
x += 1;
System.out.println(x);
}
}
修复它这是因为x++
实际上意味着,“使用存储在x
的值,然后加一”。如果您想在使用前增加该值,请改为++x
。
我不知道现在,它会使输出的差异,但你并不需要进口,你可以改变:
x = x++;
到:
x++;
显示例子如前面的回答者所说:
class T {
public static void main(String args[]) {
for (int i = 0; i < 6; i++) {
int x = 0;
x = x+1+i;
System.out.println(x);
}
}
}
解释你在做什么:
class T {
public static void main(String args[]) {
int x = 0; // x is zero
x = x++; // assign x to be x (which is 0).
// then increment a non-existant variable by 1
System.out.println(x); //print 0
}
}
- 1. 为什么trunc(1)输出为0?
- 2. 为什么此代码输出“0”?
- 3. Math.random()为什么不输出0?
- 4. 为什么总是给输出0 0 0?
- 5. 为什么我得到0的输出0
- 6. 为什么溢出结果为0?
- 7. 为什么预测一个因子为0的输出?
- 8. 为什么我的程序输出中gr计数为0?
- 9. 为什么JavaScript中的“0 === -0”为true?
- 10. 为什么xspeed!= 0?
- 11. 为什么bytes.length = 0?
- 12. 为什么输出是5?
- 13. 为什么输出是yyxz?
- 14. 为什么输出不同?
- 15. 为什么输出错误?
- 16. 为什么是responseText输出?
- 17. 为什么没有输出?
- 18. 为什么`做{...;出口(...); (0)`in C?
- 19. 分区给出0循环,为什么?
- 20. CUDA输出始终为0
- 21. 为什么在c#级输出参数返回0?
- 22. 为什么我的函数在创建num(0)和NULL输出?
- 23. 为什么输出下面的代码1而不是0?
- 24. 为什么2D数组总是在C中输出0?
- 25. 为什么\ 0在java中的不同系统中输出不同的输出
- 26. 为什么地图记录输出= 0,即使当我在mapper中输出时
- 27. Sugeno,设置输出值0和1,为什么有时输出值是0.5
- 28. 为什么打印输出不为空?
- 29. 为什么multipl输出行为grep
- 30. 为什么在IPython的Jupyter笔记本中,时间输出为Wall time:0 ns?
看看这有助于解释http://stackoverflow.com/questions/1094872/is-there-a-difference-between-x-and- x-in-java – Sean
下面的答案给出了原因。如果您想知道的不仅仅是理由,而且实际上也需要解决方案,请使用前缀运算符:'++ x'。 –
可能重复的[为什么会进入无限循环?](http://stackoverflow.com/questions/3831341/why-does-this-go-into-an-infinite-loop) – nawfal