带有增量运算符的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;inum=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