如下这个代码new出了10个k为什么没有说重复定义啊 ,要是Kit k = new Kit();  Kit k = new Kit();这样连写两个就会说重复定义的,哪位大侠和我讲讲下面的程序在内存中是怎么工作的怎么分配内存的。public class KitCircle1 {
public static void main(String[] args){
for(int i=0; i<10 ;i++) {
Kit k = new Kit();
}
}
}class Kit {
int id;
}

解决方案 »

  1.   

    呵呵!
           Kit k = new Kit();在循环中就是创建了10个对象,在内存中开辟了10个地址。只不过,在每次循环的过程中,都是一个k对象都指向了一个新的地址。     而你创建两个 Kit k = new Kit(); Kit k = new Kit();。根本就是两码事。这首先不符合java规范的,这就重名了,没有什么可研究的。
          
      

  2.   

    谢谢大家,回答。可是那10个新new出来的k不是都在for循环这个作用域中吗 ?
      

  3.   

    new 出来的对象没有什么作用域的说法。作用域是针对变量而言的。在你那个10次循环中,每次都创建的对象都被你循环作用域变量 k引用
      

  4.   

    图片发送失败··悲剧啊··
    还是说吧··每次new出来的都是新东西··只是k都是旧东西··它只不过是一个引用··我们没创建一个新的对系那个出来·其实只是改变了k的引用而已··也就是k指向的对象··
      

  5.   

    k的作用域是在for的花括号里{}
    一次循环结束,走到花括号的}时,k就生命结束了
    下次进入循环,从新进入花括号,重新生成一个k
    LZ可以试试这样的代码
    for(int i=0; i<10 ;i++) {
        {Kit k = new Kit();} //放到一个花括号里
         Kit k = new Kit(); //这样是不会有问题的,但是把上下两句换个位置就有问题了,没有花括号的那句换到上面的话,因为它的的生命周期在for的花括号里,这样就造成带花括号的那句重复定义了
    }
      

  6.   


      public static void main(String[] args) {
        for(int i=0; i<10 ;i++) {
            int x = 1;
        }
        //int i = 1;
        //int i = 1;//这两个连续定义就要报错,因为在同一作用域
      }你的问题应该是
    “for循环中定义的变量作用域到什么范围”,跟对象内存什么的无关
      

  7.   

     Kit k = new Kit();
    k的生命周期就是在当前循环内。 所以不会出现重复定义。
      

  8.   

    这么久的问题了?我想请问下,for循环里每次new的对象,一次循环结束就释放内存吗?哪位大虾帮忙解答一下!