簡體   English   中英

如何理解這種循環?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM