我正在阅读代码,我找到了一个像这样开始的方法:
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
}
有人可以解释我的病情吗? a = b!= c对我来说似乎很奇怪。
答案 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) != c
将b
的值分配给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
。