是在for循环里创建对象好还是在for循环外创建好,各种分析

qq_21391605 2016-07-18 06:11:06
for(int i=0;i<10000;++i){

  Object obj = new Object();

  System.out.println("obj="+obj);

  }

  应改成

  Object obj = null;

  for(int i=0;i<10000;++i){

  obj = new Object();

  System.out.println("obj="+obj);

  }
...全文
2055 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
脱离场景,这种问题没有意义。
ArayChou 2017-08-09
  • 打赏
  • 举报
回复
我来挖坟,中文互联网上充斥着这个问题的讨论和文章,80%的回答都是错误的。 java, 在循环外定义变量这种写法,不但性能不会提升,反而内存占得更多 请看我在知乎上的详细回答,如果对你有用,请点过赞,谢谢 https://www.zhihu.com/question/31751468/answer/211449991
iamjsber 2016-07-22
  • 打赏
  • 举报
回复
怎么会没有区别 区别大了 你循环个100 1000 次 没问题 你要成千上万次循环 还能没区别? jdbc 那块 循环遍历去 resultset值得时候 数据量大的话 你循环一次 就创建一个对象 受不了吧
南猿北辙 2016-07-22
  • 打赏
  • 举报
回复
一楼讲的有道理,如果循环次数为0的话,第一种不会创建对象,而第二种存在空对象
  • 打赏
  • 举报
回复
Object obj是创建对象引用,引用的实例地址。 new Object();是创建对象实例 两者都会占用系统资源。 改进之前for循环中创建了10000次引用和10000实例,改进后是创建了1次引用,10000实例。 在方法执行完后内存资源会被回收
qq_19800927 2016-07-20
  • 打赏
  • 举报
回复
在外面设为空,在内部new更好
qq_19800927 2016-07-20
  • 打赏
  • 举报
回复
在外面更好,这样性能更高,因为这样只是有一个地址存在
tianfang 2016-07-19
  • 打赏
  • 举报
回复
看需求 对象只在循环内使用, 在外面创建,如字符串拼接的stringbufffer 对象在循环结束后需要继续使用, 在内部创建,如在循环内新建随机数,添加到map中,要新建Integer对象
  • 打赏
  • 举报
回复
在for循环内部创建的话,每次执行循环都会创建对象,没什么特别明显坏处,只是会消耗内存。所以我们通常在for循环外部实例化对象,因为它执行一次
大雨将至 2016-07-18
  • 打赏
  • 举报
回复
基本没区别 非要较真的话,就是第一种循环结束所有创建的对象就可以被回收。第二种最后一个创建的要等到方法结束才会被回收

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧