方法1
Student st = null
for(int i=0;i<1000;i++){
  st = new Student();
  st.setAge(i);
}方法2
for(int i=0;i<1000;i++){
 Student st = new Student();
  st.setAge(i);
}
请问为什么第一种方式比第二种要好呢。

解决方案 »

  1.   

    第一种是不是会在运行的时候被java的垃圾回收机制回收掉那些没用的内存
    因为只有一个引用,该引用已经被替代,符合垃圾回收机制
      

  2.   

    方法2for(int i=0;i<1000;i++){
     Student st = new Student();//拿个桶来--每次都拿个新桶,用一次就闲置
      st.setAge(i);//接桶水
    }方法1Student st = null;//拿个桶来
    for(int i=0;i<1000;i++){
      st = new Student();//把桶里水倒掉
      st.setAge(i);//接桶水
    }
      

  3.   

    第二个方法 每次都会去声明一个对象Student 也就是说没执行一次循环就多创建一个对象 并占用一部分资源 二第一个方法就好多了
      

  4.   

    在性能上有很大的区别么?多定义了1000个引用?多进行了 999次 Student s;操作。
      

  5.   


    jvm创建变量也是有内存开销的。就是Student st
    创建变量时jvm会加载类信息,为每个变量分配内存空间。所以说变量越少,开销就相对越少。
    方法1:在for循环外创建变量,只创建了一次
    方法2:在for里面创建变量,每次循环都创建一次,循环结束了销毁。这里总共1000次。
    这就很明显是方法2好。一般创建变量都放在循环外边。
      

  6.   

    个人感觉第二种比较好,
    因为第二种在for循环中,看上去是每次都new了一个Student ,但是一旦跳出循环,jvm就自动把这些Student都回收掉了。
    而第一种,就算跳出循环,还是会有一个Student在内存里。。
      

  7.   


    jvm创建变量也是有内存开销的。就是Student st
    创建变量时jvm会加载类信息,为每个变量分配内存空间。所以说变量越少,开销就相对越少。
    方法1:在for循环外创建变量,只创建了一次
    方法2:在for里面创建变量,每次循环都创建一次,循环结束了销毁。这里总共1000次。
    这就很明显是方法2好。一般创建变量都放在循环外边。8楼正解
      

  8.   


    jvm创建变量也是有内存开销的。就是Student st
    创建变量时jvm会加载类信息,为每个变量分配内存空间。所以说变量越少,开销就相对越少。
    方法1:在for循环外创建变量,只创建了一次
    方法2:在for里面创建变量,每次循环都创建一次,循环结束了销毁。这里总共1000次。
    这就很明显是方法2好。一般创建变量都放在循环外边。8楼正解+1
      

  9.   

    时间戳转long 20130506070809
    最快捷的算法,应该怎么弄?