为了账号安全,请及时绑定邮箱和手机立即绑定

我的代码为什么会OutOfMemory

我的代码为什么会OutOfMemory

缥缈止盈 2019-03-12 17:14:50
为什么这样写会出现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);}
查看完整描述

1 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

第一段:


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 这个变量是如何改变的,你就会搞清楚的。

查看完整回答
反对 回复 2019-04-15
  • 1 回答
  • 0 关注
  • 404 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号