Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有增量运算符的java循环示例_Java_Loops_For Loop_Operator Keyword_Increment - Fatal编程技术网

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

带有增量运算符的java循环示例,java,loops,for-loop,operator-keyword,increment,Java,Loops,For Loop,Operator Keyword,Increment,我有点怀疑,我有一个代码 int num=0; for(int i=0;i<5;i++){ num=num++; System.out.print(num); } int num=0; 对于(inti=0;i这是什么 您可以使用: num++; System.out.print(num); ++运算符最后递增num,因此当num为0时,您将再次将其设置为0 它必须处理++操作符如何增加num,以及num真正指向的是什么++ 有趣的是,num=++num将正确地递增并分

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

 int num=0;
 for(int i=0;i<5;i++){
   num=num++;
   System.out.print(num);
 }
int num=0;
对于(inti=0;i这是什么

您可以使用:

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

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

它必须处理++操作符如何增加num,以及num真正指向的是什么++

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

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;< /c> >/p> 然后生成的字节码将是-

 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++

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

对于(inti=0;i
num=num++;

这里您使用的是带赋值的postfix++运算符。这意味着您首先赋值,然后递增。
所以

相当于

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

深入查看第2行。
num+1
的结果没有分配给任何对象。因此
num
始终在第1行分配值。即,在您的情况下为0。

确定,在java
=
中,运算符的工作如下

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

在这里,
num=0的初始值

num=num++
此增量不会影响
num
。如果您执行
++num
,它将立即在宫殿中生效。因此,您再次被分配
num
0
。因此整个过程将持续发生,直到循环停止。

请解释

增量后(n++):首先执行语句,然后将值增加1

这里,“num++”的值被分配给num,该值在增量之前,为0。 所以num的值总是0


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

您的代码中有多个语法错误?它是如何运行的?int i未定义,num++后面没有分号?num=num++where is;?的可能重复项不严格正确。执行赋值的顺序是任意的(不由语言定义)。我假设在poster的问题中,赋值(到原始值)是在post增量之后执行的。因此,会覆盖任何增量。准确地说。该语言不会在同一语句中定义赋值和增量存在的行为。C/C++(尽管如此,排序的最小单位可以是逗号运算符子句。)像这样的特殊情况被故意忽略,以允许优化的灵活性,并阻止代码依赖于高度模糊/或依赖于实现的结果。每个人都失去了分号吗?Op询问原因,您提供了solutin@javaBeginner好的,回答得好。“自增式”操作符没有o被分配给他们的变量,尝试这样做是错误的!+1。
 num = num;//line1
 num+1;//line2