Java中的赋值结果

时间:2012-10-18 21:56:08

标签: assignment-operator

我正在查看第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;

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

outFile.write(byteRead);

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

outFile.write(inFile.read());

2 个答案:

答案 0 :(得分:0)

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

您引用的代码示例将此用于紧凑的while循环,该循环从输入读取一个字节,将其写入输出并继续执行此操作,直到inFile.read()返回-1(表示已到达文件末尾)。 / p>

答案 1 :(得分:0)

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

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

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

所以,如果输入文件是:

abcdefghijklmnopqrstuvwxyz

第一个版本的输出将是:

abcdefghijklmnopqrstuvwxyz

第二个的输出将是:

bdfhjlnqrtuxz