0

我正在查看第 11 页上的代码http://www.cs.usfca.edu/~parrt/doc/java/JavaIO-notes.pdf

我有一个陈述有问题。我认为分配的结果是一个左值。所以 ((byteRead = inFile.read()) != -1) 应该与 (inFile.read()) != -1) 相同。尽管查看输出,但情况似乎并非如此。所以我的问题是语句 ((byteRead = inFile.read()) != -1) 是如何解析的?

编辑:从回复看来,我对作业结果有当前的解释。我想知道通过替换代码片段出了什么问题

int byteRead;

而((byteRead = inFile.read()) != -1)

outFile.write(byteRead);

而(inFile.read()!= -1)

outFile.write(inFile.read());

4

2 回答 2

0

((byteRead = inFile.read()) != -1) 和 (inFile.read() != -1) 在某种意义上是等效的布尔表达式。但是,第一个有副作用:它将 inFile.read() 的结果存储在变量 byteRead 中。

您引用的代码示例将此用于紧凑的 while 循环,该循环从输入中读取一个字节,将其写入输出并一直这样做,直到 inFile.read() 返回 -1(表示已到达文件末尾)。

于 2012-10-18T22:12:23.603 回答
0

所以,既然您发布了两个版本的代码,答案就很清楚了:

在您的第一个版本中,读取的每个字节都分配给 byteRead,然后写入输出流。

在第二个版本中,您使用 read() 消耗一个字节,但不将其分配给变量。然后,您读取写入输出流的另一个字节(流中的下一个字节)。

所以,如果输入文件是:

abcdefghijklmnopqrstuvwxyz

第一个版本的输出将是:

abcdefghijklmnopqrstuvwxyz

第二个的输出将是:

bdfhjlnqrtuxz
于 2012-10-19T14:37:45.213 回答