代码之家  ›  专栏  ›  技术社区  ›  Danyal Sandeelo

Java中的for循环永远运行[duplicate]

  •  3
  • Danyal Sandeelo  · 技术社区  · 6 年前

    这个问题已经有了答案:

    遇到了这个有趣的问题。我知道后增量和前增量。

    public  static void main(String[] args){
       for (int i=0; i<10 ;){
       i=i++;
       System.out.println(i);
       }
    }
    

    输出:

    0
    0
    0
    0
    

    这段代码永远运行,简而言之,这是一个无限循环,从技术上讲,当我们看到 i 赋值后,就有后增量操作,范围在循环内,即使是后增量,也应该增加实际的 这不应该永远持续下去。我想从专家那里得到一些有趣的解释。

    5 回复  |  直到 6 年前
        1
  •  12
  •   Oliver Norin    6 年前

    我们总是知道 i++ 回报 i 然后递增。然而,这并不完全正确。执行操作后总是返回值。那又怎么样 我++ 实际上,它首先递增1,然后返回 在增加之前。所以 i=i++ 将首先递增 然后将其设置回递增之前的值。

        2
  •  8
  •   Seblor Oybek    6 年前

    问题就在这里:

    i=i++
    

    i++ 已经在递增变量。你在做什么 i 的值在增量之前的自身值。

    据记录,如果你用 i = ++i ,但那没用。

        3
  •  2
  •   Scary Wombat    6 年前

    你可以换成

    for (int i=0; i<10 ;i++){
       System.out.println(i);
    }
    

    for (int i=0; i<10 ;){
       i++;
       System.out.println(i);
    }
    

    for (int i=0; i<10 ;){
       i = i + 1;
       System.out.println(i);
    }
    
        4
  •  1
  •   alynurly    6 年前

    i=i++

    int tmp = i;

    i+=1;

    i=tmp;

        5
  •  1
  •   oybek    6 年前

    这里都是关于行动的优先权。 后缀递增优先级较高,但递增前保存旧值,递增后返回保存值。之后 i 是递增的,但已返回旧值,因此您再次将其分配给 是的。