使用“while(line = reader.readLine()!= null)时键入不匹配”

时间:2014-09-29 05:11:40

标签: java type-mismatch

所以我试图简单地打印我的缓冲读取的每一行,看看它是否输出正确,但我在eclipse和运行时收到错误。绝对无处不在我看到输出缓冲读卡器的代码是

    String line;
    while(line = myReader.readLine() != null){
    {
        System.out.println(line);
    }

这会抛出错误,说"类型不匹配无法从布尔值转换为字符串。"如果我将行更改为布尔变量,它将运行并打印" true"三次,这是我期待的线数,所以有谁知道如何打印实际文本?我假设它正在抛出错误,因为!= null将返回true或false但我无法让它工作。

2 个答案:

答案 0 :(得分:7)

这是因为higher Operator Precedence of equality v/s assignment

来自Documentation

  

当具有相同优先级的运算符出现在同一表达式中时,规则必须控制首先计算的值。 除了赋值运算符之外的所有二元运算符都是从左到右计算的;赋值运算符从右到左进行计算。

(强调我的) enter image description here 所以

line = myReader.readLine() != null

按优先级评估为

line = (myReader.readLine() != null)

尝试将布尔值分配给line,给出错误。

正确用法:

(line = myReader.readLine()) != null

答案 1 :(得分:5)

while ( (line = myReader.readLine()) != null ) {会这样做。你忘了正确地放()

问题是,myReader.readLine() != null部分首先被评估。