在 while 条件下赋值

Assigning values in while condition

首先我知道=和==的区别。我想使用 = 隐式地进行无限循环。 所以我的代码如下所示:

 boolean flag= true;
    while (flag=false){
        System.out.println("inside loop");
    }
    System.out.println("rest");

不幸的是它没有进入循环并打印"rest"。为什么?我读错了吗? 在 while 条件下,我将值 false 分配给标志。所以它循环 while flag=false (这是)。

当我这样做时(从 false 变为 true)它进入无限循环:

boolean flag= true;
    while (flag=true){
        System.out.println("inside loop");
    }
    System.out.println("rest");

在我看来,这两个例子都应该进入循环。但只有第一个这样做。请帮助我理解这一点。谢谢

= 和 == 之间的唯一区别是:

  • = 是一个赋值运算符,您将值赋给 int、boolean 或任何常量/变量。
  • ==是一个运算符,主要用于循环(for、else for、if、while)

对于你的情况,我可能会说你需要在 while 循环中使用 == :

boolean flag=true;
    while (flag==false){
        System.out.println("inside loop");
    }
    System.out.println("rest");

使用无限循环也不是很好。你不会出去,它会破坏你的代码。

这是由于赋值运算符的工作方式所致。

在你的循环条件中你说的是

flag = true

returns true,但在此之前将 true 分配给 flag

这是因为我们可以像这样一次做多项作业:

boolean test = flag = true;
// test == true

本质上 (flag = true) 转换为:

  • 将 true 赋值给标志
  • return true 进一步使用

你的 while 循环测试的第一步是

flag=false

紧接着测试它的值,这是错误的。

如果值为 false,则不会进入 while 循环。

while (flag=false) 做了两件事:

  1. 它将false分配给flag
  2. 计算结果为 while(false)

因为它的计算结果为 while(false),它的主体将不会被执行。

同理,

while (flag=true) 做了两件事:

  1. 它将true分配给flag
  2. 计算结果为 while(true)

由于它的计算结果为 while(true),它的主体将被无限执行。