【问题标题】:Type mismatch when using "while(line = reader.readLine() != null)"使用“while(line = reader.readLine() != null)”时类型不匹配
【发布时间】:2014-09-29 13:52:48
【问题描述】:

所以我试图简单地打印缓冲读取的每一行以查看它是否正确输出,但在 Eclipse 和运行时出现错误。绝对在我看到输出缓冲阅读器的代码的任何地方都是

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

这会引发错误,提示“类型不匹配无法从布尔值转换为字符串”。如果我将 line 更改为布尔变量,它会运行并打印“true”三次,这是我期望的行数,那么有人知道我如何打印实际文本吗?我假设它正在抛出错误,因为 != null 将返回 true 或 false 但我无法让它工作。

【问题讨论】:

    标签: java type-mismatch


    【解决方案1】:

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

    来自Documentation

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

    (强调我的) 所以

    line = myReader.readLine() != null
    

    按照优先级进行评估

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

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

    正确用法:

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

    【讨论】:

    • 这是因为 = 的运算符优先于 !=,这就是为什么额外的括号修复它的原因。如果是因为从右到左,那将无法解决。
    【解决方案2】:

    while ( (line = myReader.readLine()) != null ) { 可以。你忘了正确输入()

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

    【讨论】:

      猜你喜欢
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-07
      • 2021-06-05
      相关资源
      最近更新 更多