java operator ++问题

sha*_*nky 9 java operators

我想知道为什么第一个代码输出是000而第二个是123

第一:

int z=0;
    while(z<4)
    {
       z=z++;
       System.out.print(z);

    }
Run Code Online (Sandbox Code Playgroud)

第二个 :

int z=0;
int x=0;
    while(z<5)
    {
       x=z++;
       System.out.print(x);

    }
Run Code Online (Sandbox Code Playgroud)

这两个代码有什么不同,为什么第一个块不增加z的值?

Jas*_*n S 13

z=z++ 是一个程序员的错误 - 它的作用是增加z然后将z设置为其旧值 - 因此它用旧值覆盖z并因此撤消增量.


Jac*_*cob 8

增量运算符已递增z,您不必返回返回值z.

z++
Run Code Online (Sandbox Code Playgroud)

是一个后期增量.它返回z,然后它递增z.在您的第一个示例中,您基本上只是将0分配给z,并且您的循环不应该结束.

在第二个示例中,您将z的旧值分配给x,然后增加z.这意味着您不会像第一个示例那样再次开始递增0,但是当z达到5(因此z <5为假)时,由于后递增,z为5,x为4.