為什么這樣寫(xiě)會(huì)出現(xiàn)OutOfMemory錯(cuò)誤,而第二段那樣寫(xiě)就不會(huì)?URL url = new URL(urlStr);HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();BufferedReader buffer = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));line = buffer.readLine();while(line != null){sb.append(line);}URL url = new URL(urlStr);HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();BufferedReader buffer = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));while ((line = buffer.readLine()) != null) {sb.append(line);}
1 回答

jeck貓
TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊
第一段:
line = buffer.readLine();
while (line != null){
sb.append(line);
}
line 的值始終不變,這是一個(gè)死循環(huán),所以 sb 會(huì)越來(lái)越大。
第二段:
while ((line = buffer.readLine()) != null) {
sb.append(line);
}
line 的值會(huì)不斷改變,最后讀到流的末尾,readLine() 會(huì)返回 null ,于是循環(huán)結(jié)束。
while 小括號(hào)里面的代碼是每次都要執(zhí)行的,而 line = buffer.readLine() 這個(gè)是個(gè)賦值語(yǔ)句。我覺(jué)得你是不是不理解為什么每次 buffer.readLine() 會(huì)返回不同的值...建議用一下 IDE(如 eclipse)的單步調(diào)試功能,觀察一下 line 這個(gè)變量是如何改變的,你就會(huì)搞清楚的。
添加回答
舉報(bào)
0/150
提交
取消