我的代码为什么会OutOfMemory

为什么这样写会出现OutOfMemory错误,而第二段那样写就不会?


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

}


缥缈止盈
浏览 405回答 1
1回答

jeck猫

第一段:line = buffer.readLine();while (line != null){    sb.append(line);}line 的值始终不变,这是一个死循环,所以 sb 会越来越大。第二段:while ((line = buffer.readLine()) != null) {    sb.append(line);}line 的值会不断改变,最后读到流的末尾,readLine() 会返回 null ,于是循环结束。while 小括号里面的代码是每次都要执行的,而 line = buffer.readLine() 这个是个赋值语句。我觉得你是不是不理解为什么每次 buffer.readLine() 会返回不同的值...建议用一下 IDE(如 eclipse)的单步调试功能,观察一下 line 这个变量是如何改变的,你就会搞清楚的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java