4

我在这里有点怀疑,我有一个代码

 int num=0;
 for(int i=0;i<5;i++){
   num=num++;
   System.out.print(num);
 }

为什么输出总是00000

4

7 回答 7

10

++ 运算符最后递增 num,因此当 num 为 0 时,您将再次将其设置为 0。

它必须处理 ++ 运算符如何递增 num,以及 num 真正指向什么。为了避免它,只需使用 num++

有趣的是,num=++num 将正确地递增并分配递增的值,尽管 ++ 运算符的全部目的,无论是 pre 还是 post,都是直接修改值。您不必将其重新分配回该值。

于 2013-08-22T05:22:04.347 回答
3

使用数字++;

int num=0;
for(int i=0;i<5;i++){
   num++;
   System.out.print(num);
}

输出12345

数=数++;

等于num=num;

数=++数;

等于num=num+1;

于 2013-08-22T05:26:00.087 回答
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
...
于 2013-08-22T05:22:31.053 回答
1

这就是postfix ++ 所做的。

您可以使用:

num++;
System.out.print(num);
于 2013-08-22T05:20:10.507 回答
1

num=num++;
在这里,您使用带有赋值的后缀 ++ 运算符。这意味着您首先分配了值,然后将其递增。
所以

 num = num++;

相当于

 num = num;//line1
 num+1;//line2

深入查看line2。结果num+1未分配给任何东西。因此,在您的情况下,num始终在line1 .ie,0 处分配值。

于 2013-08-22T05:31:58.717 回答
1

好的,在 java=中操作符的工作方式如下

L.H.S=R.H.S 右侧值将分配给左侧变量。

在这里的初始值num=0

num=num++这个增量没有影响到位num。如果你这样做++num,它将立即在宫殿中生效。所以你又被分配0num。所以整个过程这将连续发生,直到循环停止。

于 2013-08-22T05:39:11.480 回答
1

为了解释,

Post Increment(n++) :首先执行语句,然后将值加一。

在这里,'num++' 的值被分配给 num 并且在增量之前并且为 0。所以 num 将始终具有值 0。

你可以在那里简单地使用 num++ 。

于 2013-08-22T06:17:26.030 回答