请解释以下代码片段中的编译器行为。考虑文本文件包含以下文本 TOBE ,对应的字节值为 84, 79, 66, 69
for(int i=0;i<4;i++){
byte inByte=(byte) buffInputFile.read();
system.out.println(inByte);
}
当我运行此代码片段时,我得到以下输出 84 79 66 69
但是当我调试 for 循环并进入其中时。 buffInputFile.read() 首先向我显示 84,当分配给 inByte 时,它是 79。我得到的输出是
79,66,69,13(13为回车)。
最佳答案
我怀疑您有一个 buffInputFile.read()
的调试器监视表达式 - 它正在从流中读取值以便显示它...但该值不是当该方法作为代码的一部分执行时可用。您已经从流中读取了该字节,因此下一次调用 read()
将读取下一个字节,正如预期的那样。
一般来说,像这样在调试器中执行具有副作用的方法是一个非常糟糕的主意 - 它恰恰会导致这种困惑。如果您只是在赋值后的行上设置断点,您就可以通过这种方式看到值。
简而言之:这根本不是编译器的行为出现问题 - 这是您使用调试器的方式。
关于java - 从文本文件中读取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6261454/