0

我正在阅读 PushbackInputStream 的源代码以了解 unread() 方法:http: //javasourcecode.org/html/open-source/jdk/jdk-6u23/java/io/PushbackInputStream.java.html但就行了194: buf[--pos] = (byte)b 让我不明白那是什么意思。谁能告诉我该行中 --pos 的含义?提前致谢。

Ps:我什至尝试编写此代码:

class Test2 {
public static void main(String[] args) {
    char[] c = { 'd', 'e', 'c', 'a', 'f', 'f', 'e',
            'i', 'n', 'a', 't', 'e', 'd' };
    char temp = 'o';
    c[--1] = tmp;
 }
}

但是eclipse告诉我:无效的参数操作

4

5 回答 5

1

--pos意思是“将 的值减pos一,并使用结果值”。

这不能应用于常量:--1无效。但是,您可以改写0

于 2013-03-18T06:56:18.027 回答
0

Invalid argument operation error is because you are doing the decrement operation on a number instead of a variable.

于 2013-03-18T07:04:09.467 回答
0

--是递减运算符,它只对字段(变量)不是常数有意义。

buf[--pos] = (byte)b;表示将字节值设置bbuf[pos - 1]并将pos导致递减。

于 2013-03-18T06:57:57.957 回答
0

1是一个常数。你不能减少一个常数——或改变它的值——

但是你可以这样做:pos = 1;,buf[--pos]会做你想做的事,因为它pos是一个变量,而不是一个常数。

或者只是使用buf[0]

于 2013-03-18T07:01:06.537 回答
0

在实际代码中,pos 是缓冲区的当前索引。要取消读取一个字节,您需要将该索引减一并将指定字节存储在缓冲区中新的当前索引位置。

--pos 具有将 pos 减一的副作用,结果是 pos 的新值,buf[--pos] = (byte)b;工作也是如此。

由于副作用, 的操作数--必须是可以减一的东西。常数不能。

于 2013-03-18T07:01:14.803 回答