黑马程序员技术交流社区

标题: 今天看到帖子里一个面试题 有话说 [打印本页]

作者: wenke    时间: 2015-3-22 09:13
标题: 今天看到帖子里一个面试题 有话说
for(int i =0;i<1000;i++) {
      Object obj = new Object();
}
面试题要优化这个循环    帖子里有人这么弄的
Object=null;
for(int i =0;i<1000;i++) {
       obj=new Object();
}
搞不懂 只有一个变量引用obj 循环了1000个对象  obj只能引用一个  其他999个全部没指向  全部要被垃圾回收  这面试题要做什么 ?

作者: zhqw_heima    时间: 2015-3-22 09:16
每次循环执行的都是Object obj=new Object(),每次虽然都是新建对象,但是新建的对象都是同一个地址,所以可以那样优化
作者: wenke    时间: 2015-3-22 09:19
zhqw_heima 发表于 2015-3-22 09:16
每次循环执行的都是Object obj=new Object(),每次虽然都是新建对象,但是新建的对象都是同一个地址,所以可 ...

一个地址可以指向1000个对象吗   表示不理解
作者: zhqw_heima    时间: 2015-3-22 09:20
wenke 发表于 2015-3-22 09:19
一个地址可以指向1000个对象吗   表示不理解

新建的时候如果判断该对象已经存在 是不会再新建对象的
作者: Etby    时间: 2015-3-22 10:03
Object obj = new Object();  前面的obj代表对象的引用  这句话的意思是先创建一个叫obj的对Object对象的引用 然后再new一个新的object 然后将Object的地址传给 obj  所以 如果在循环内部的话就会导致建立了1000次Object的引用
作者: Etby    时间: 2015-3-22 10:07
还有就是 对于大括号来说 就是一个作用域
出了大括号就没用了
所以 一次循环以后 obj 就已经没有了
这题所优化的应该是不断创建变量的开销吧 至于GC 谁知道这1000个对象什么时候被回收呢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2