我有点怀疑,我有一个代码
int num=0;
for(int i=0;i<5;i++){
num=num++;
System.out.print(num);
}
为什么输出总是00000
答案 0 :(得分:9)
++运算符递增num last,所以当num为0时,再次将其设置为0。
它必须处理++运算符如何递增num,以及真正指向的num。要避免它,只需使用num ++
有趣的是,num = ++ num将正确递增并分配递增的值,尽管++运算符的前提或后置的全部目的是直接修改值。您不必将其重新分配回值。
答案 1 :(得分:3)
使用num ++;
int num=0;
for(int i=0;i<5;i++){
num++;
System.out.print(num);
}
输出 12345
<强> NUM = NUM ++; 强>
等于 num = num;
<强> NUM = NUM ++; 强>
等于 num = num + 1;
答案 2 :(得分:2)
num=num++;
是平等的 -
num = num;
num ++;
首先它分配然后它尝试增加已经分配的num。为了更好的钙化 -
0 iconst_0
1 istore_1 [num]
2 iconst_0
3 istore_2 [i]
4 goto 22
7 iload_1 [num] // Load first
8 iinc 1 1 [num] // incement but no reload
11 istore_1 [num] // store old load value
12 getstatic java.lang.System.out : java.io.PrintStream [16]
15 iload_1 [num]
16 invokevirtual java.io.PrintStream.print(int) : void [22]
19 iinc 2 1 [i]
22 iload_2 [i]
23 iconst_5
24 if_icmplt 7
27 return
如果我们考虑num=++num;
然后生成的字节代码为 -
0 iconst_0
1 istore_1 [num]
2 iconst_0
3 istore_2 [i]
4 goto 22
7 iinc 1 1 [num] // Increment
10 iload_1 [num] // load the incremented value
11 istore_1 [num] // store the loaded incremented value
...
答案 3 :(得分:1)
答案 4 :(得分:1)
num=num++;
在这里你使用带有赋值的postfix ++运算符。这意味着你首先赋值,然后递增它
所以
num = num++;
相当于
num = num;//line1
num+1;//line2
深入了解 line2 。num+1
的结果未分配给任何内容。因此,num
始终具有在 line1 指定的值.ie,在你的情况下为0。
答案 5 :(得分:1)
好的,在java =
中,运算符的工作原理如下
L.H.S=R.H.S
右侧值将分配给左侧变量。
此处的初始值为num=0
和
num=num++
此增量不会对num
产生影响。如果你做++num
它会立刻影响到宫殿。所以,您再次为0
分配num
。因此整个过程将持续发生,直到循环停止。
答案 6 :(得分:1)
解释,
Post Increment(n ++):首先执行语句,然后将值增加一。
这里,'num ++'的值被赋给num,并且在赋值之前,它是0。 所以num总是值为0。
你可以在那里使用num ++。