所以我试图简单地打印我的缓冲读取的每一行,看看它是否输出正确,但我在eclipse和运行时收到错误。绝对无处不在我看到输出缓冲读卡器的代码是
String line;
while(line = myReader.readLine() != null){
{
System.out.println(line);
}
这会抛出错误,说"类型不匹配无法从布尔值转换为字符串。"如果我将行更改为布尔变量,它将运行并打印" true"三次,这是我期待的线数,所以有谁知道如何打印实际文本?我假设它正在抛出错误,因为!= null将返回true或false但我无法让它工作。
答案 0 :(得分:7)
这是因为higher Operator Precedence of equality v/s assignment
当具有相同优先级的运算符出现在同一表达式中时,规则必须控制首先计算的值。 除了赋值运算符之外的所有二元运算符都是从左到右计算的;赋值运算符从右到左进行计算。
(强调我的)
所以
line = myReader.readLine() != null
按优先级评估为
line = (myReader.readLine() != null)
尝试将布尔值分配给line
,给出错误。
(line = myReader.readLine()) != null
答案 1 :(得分:5)
while ( (line = myReader.readLine()) != null ) {
会这样做。你忘了正确地放()
。
问题是,myReader.readLine() != null
部分首先被评估。