解释我的输出

Pri*_*amr 0 c# java operator-keyword

我的输出应该是5 30,输出是5 25我想知道为什么给5 25

public static void main(String[] args)
{
   int i = 1, j = 5;

   do
   {
       System.out.println( i = i++ * j);
   } 
   while (i <= 10);

   System.out.println();
}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 10

第一次迭代:

i == 1 : i=i++ * j
            1  * 5 = 5
Run Code Online (Sandbox Code Playgroud)

第二次迭代:

i == 5 : i=i++ * j
            5  * 5 = 25
Run Code Online (Sandbox Code Playgroud)

请注意,后增量运算符返回变量的原始值(在增量之前).

我觉得很奇怪你在第一次迭代中期望正确的输出(5),但是在第二次迭代中没有遵循相同的逻辑来获得正确的输出(25).

看到您的评论,您应该注意表达式i=i++ * j按以下顺序计算:

  1. i++被评估,返回i(1在第一次迭代中)的原始值并递增i到2.

  2. 乘法被评估 - 1 * 5,等于5.

  3. i(分配之前的值2)已分配5.