这个条件有什么作用(BufferedReader 和 InputStreamReader)?

What does this condition do (BufferredReader and InputStreamReader)?

我目前正在阅读一段代码,我发现了一个像这样开始的方法:

BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));  

String userInput;

while ((userInput = stdIn.readLine()) != null) {

  }

谁能给我解释一下当时的情况? a = b != c 对我来说似乎很奇怪。

好像你的眼睛扫过一对括号:

while ( (userInput = stdIn.readLine() ) != null) {

}

我已经尝试在上面说得更清楚了。

正在为变量 userInput 赋值 stdIn.readLine()。虽然 userInput 在该赋值后不为空,但循环仍在继续。

这只是处理 userInput 更新以及检查 null

的单行代码

方括号(userInput = stdIn.readLine())中的赋值同时做了两件事:它将行分配给userInput变量并且将自身计算为该值。但是,如果没有读取任何内容,则 readLine() returns null 和整个表达式的计算结果为 null.

因此,当用户输入中有行时,条件 (userInput = stdIn.readLine() ) != null 成立,并且 while 循环继续。当用户输入中没有更多行时,条件为假,while 循环停止。

=是赋值运算符,不是比较运算符。

(a = b) != cb 的值赋给 a,然后将其与 c.

进行比较

while ((userInput = stdIn.readLine()) != null) { ... }

stdIn.readLine() 正在获取一个值,然后将其存储为 userInput,并检查该值以确保它不是 null,以便 while 循环进步。这导致循环读取文件的每一行,直到用完要读取的行。

类似于:

int a = 0;
int b = 0;

while ((a = b++) != 10) {

    System.out.println(a);

};  

这里我们给a赋值b,并检查它的值是否为10。

同样,userInput = stdIn.readLine() 意味着我们正在读取一行,将其分配给 userInput 变量并检查直到它读取 null.