带增量运算符的java循环示例

时间:2013-08-22 05:19:06

标签: java loops for-loop operator-keyword increment

我有点怀疑,我有一个代码

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

为什么输出总是00000

7 个答案:

答案 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)

那是postfix ++ does

您可以使用:

num++;
System.out.print(num);

答案 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 ++。