[英]How to understand this kind of loop?
來自此站點上的文章: 如何讀取pdf文件並將其寫入outputStream
有一個循環:
while ((c = is.read(buf, 0, buf.length)) > 0) {
os.write(buf, 0, c);
os.flush();
}
有人可以幫助我了解while語句在這里的工作方式嗎? 通常我會明白
(x < 10) {
x ++;
......
}
但是這里(c = is.read(buf, 0, buf.length)
的結果如何大於0?
另外,有沒有一種方法可以調試循環以查看c的每一步的值?
while ((c = is.read(buf, 0, buf.length)) > 0) {
按順序執行
首先分配: c = is.read(buf, 0, buf.length)
比較秒: c > 0
如Java語言規范所述
在運行時,賦值表達式的結果是賦值發生后變量的值。 賦值表達式的結果本身不是變量。
所以一個賦值表達式像
c = is.read(buf, 0, buf.length)
不管它出現在(有效)代碼中的什么位置,它都有一個值,然后可以將其與<
進行比較。
另外,有沒有一種方法可以調試循環以查看c的每一步的值?
在循環內添加一個log語句,或者在循環內的某個地方放置一個斷點,然后檢查變量表。
它依賴於賦值的副作用,即賦值,這是一種常見的慣用書寫方式
int c = is.read(buf, 0, buf.length);
while (c > 0) {
os.write(buf, 0, c);
os.flush();
c = is.read(buf, 0, buf.length)
}
另外,為了提高性能,您可能不希望在每次循環評估時都調用os.flush()
while ((c = is.read(buf, 0, buf.length)) > 0) {
os.write(buf, 0, c);
}
os.flush();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.