我在这里有点怀疑,我有一个代码
int num=0;
for(int i=0;i<5;i++){
num=num++;
System.out.print(num);
}
为什么输出总是00000
我在这里有点怀疑,我有一个代码
int num=0;
for(int i=0;i<5;i++){
num=num++;
System.out.print(num);
}
为什么输出总是00000
++ 运算符最后递增 num,因此当 num 为 0 时,您将再次将其设置为 0。
它必须处理 ++ 运算符如何递增 num,以及 num 真正指向什么。为了避免它,只需使用 num++
有趣的是,num=++num 将正确地递增并分配递增的值,尽管 ++ 运算符的全部目的,无论是 pre 还是 post,都是直接修改值。您不必将其重新分配回该值。
使用数字++;
int num=0;
for(int i=0;i<5;i++){
num++;
System.out.print(num);
}
输出12345
数=数++;
等于num=num;
数=++数;
等于num=num+1;
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
...
num=num++;
在这里,您使用带有赋值的后缀 ++ 运算符。这意味着您首先分配了值,然后将其递增。
所以
num = num++;
相当于
num = num;//line1
num+1;//line2
深入查看line2。结果num+1
未分配给任何东西。因此,在您的情况下,num
始终在line1 .ie,0 处分配值。
好的,在 java=
中操作符的工作方式如下
L.H.S=R.H.S
右侧值将分配给左侧变量。
在这里的初始值num=0
和
num=num++
这个增量没有影响到位num
。如果你这样做++num
,它将立即在宫殿中生效。所以你又被分配0
了num
。所以整个过程这将连续发生,直到循环停止。
为了解释,
Post Increment(n++) :首先执行语句,然后将值加一。
在这里,'num++' 的值被分配给 num 并且在增量之前并且为 0。所以 num 将始终具有值 0。
你可以在那里简单地使用 num++ 。