这个条件做了什么(BufferredReader和InputStreamReader)?

时间:2015-05-27 19:20:31

标签: java bufferedreader inputstreamreader

我正在阅读代码,我找到了一个像这样开始的方法:

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

String userInput;

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

  }

有人可以解释我的病情吗? a = b!= c对我来说似乎很奇怪。

4 个答案:

答案 0 :(得分:2)

好像你的眼睛盯着一对括号:

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

}

我试图在上面说清楚。

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

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

的单行程序

答案 1 :(得分:1)

括号(userInput = stdIn.readLine())中的赋值同时执行两项操作:它将行分配给userInput变量将自身计算为此值。但如果没有读取任何内容,readLine()将返回null,整个表达式的计算结果为null

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

答案 2 :(得分:1)

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

(a = b) != cb的值分配给a,然后将其与c进行比较。

的情况下
while ((userInput = stdIn.readLine()) != null) { ... }

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

答案 3 :(得分:1)

类似于:

int a = 0;
int b = 0;

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

    System.out.println(a);

};  

这里我们分配一个b的增量,并检查它的值是否为10。

同样,userInput = stdIn.readLine()表示我们正在阅读一行,将其分配给userInput变量并进行检查,直至其显示为null