2013-03-18 30 views
0

我正在閱讀PushbackInputStream的源代碼以獲取我對unread()方法的理解:http://javasourcecode.org/html/open-source/jdk/jdk-6u23/java/io/PushbackInputStream.java.html但在行194上:buf [--pos] =(byte)b讓我不明白這是什麼意思。 任何人都可以告訴我在該行中的--pos的含義嗎? 在此先感謝。java buf [ - pos] =(byte)b請解釋我什麼在方括號中

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; 
} 
} 

但日食告訴我:無效的參數操作

回答

0

--是遞減運算符,它只適用於字段(變量)不是常量。

buf[--pos] = (byte)b;裝置組字節值bbuf[pos - 1]pos會導致被遞減。

1

--pos指「一個降低pos值,並使用所產生的價值。」

這不能應用於一個常量:--1是無效的。但是,您可以改爲編寫0

0

1是一個常數。你不能減少一個常數 - 或改變它的價值 -

但是你可以這樣做:pos = 1;buf[--pos]會做你想要它做的事情,因爲pos是一個變量,而不是一個常量。

替代地只使用buf[0]

0

在實際代碼,pos是當前索引到緩衝器中。要讀取一個字節,您需要將該索引減1,並將指定的字節存儲在緩衝區中新的當前索引位置。

--pos有一個副作用,減少pos一個,因此pos的新值,所以buf[--pos] = (byte)b;做的工作。

由於副作用,--的操作數必須是可以減1的操作數。常數不能。

0

無效的參數操作錯誤是因爲您正在對數字而不是變量執行遞減操作。

相關問題