如何理解这种循环?

时间:2015-01-12 02:04:04

标签: java while-loop

来自本网站的文章: How to read pdf file and write it to outputStream

有一个循环:

while ((c = is.read(buf, 0, buf.length)) > 0) {
    os.write(buf, 0, c);
    os.flush();
}

有人可以帮我理解while语句在这里的工作原理吗?通常我会理解如何

(x < 10) {
  x ++;
  ......
}

但是,(c = is.read(buf, 0, buf.length)的结果怎么能大于0?

另外,有没有办法调试循环以查看每个步骤中c的值是什么?

3 个答案:

答案 0 :(得分:1)

while ((c = is.read(buf, 0, buf.length)) > 0) {

按顺序执行

首先分配:c = is.read(buf, 0, buf.length)

比较第二:c > 0

答案 1 :(得分:1)

作为Java Language Specification

  

在运行时,赋值表达式的结果是值   分配发生后的变量。一个结果   赋值表达式本身不是变量。

所以像

这样的赋值表达式
c = is.read(buf, 0, buf.length)

无论它出现在(有效)代码中的哪个位置,都有一个值,然后可以将其与<进行比较。

  

另外,有没有办法调试循环以查看每个步骤中c的值是什么?

在循环中添加日志语句或在循环内的某处放置断点并检查变量表。

答案 2 :(得分:0)

它依赖于赋值的副作用是赋值,它是一种常见的惯用写作方式

int c = is.read(buf, 0, buf.length);
while (c > 0) {
    os.write(buf, 0, c);
    os.flush();
    c = is.read(buf, 0, buf.length)
}

此外,为了提高性能,您可能不希望在每次循环评估时调用os.flush()

while ((c = is.read(buf, 0, buf.length)) > 0) {
    os.write(buf, 0, c);
}
os.flush();