黑马程序员技术交流社区

标题: 关于for循环的问题 [打印本页]

作者: fiend    时间: 2012-7-28 10:41
标题: 关于for循环的问题
本帖最后由 fiend 于 2012-7-28 11:26 编辑

for (int i = 0; i < 10; i++)
   Test t = new Test();
为什么这样写不行?不是当只有一条语句的时候可以省略花括号吗?
怎么现在却不行了呢?谁能帮我解释一下?谢谢。
作者: 王龙彪    时间: 2012-7-28 10:46
对象名字总不能都是t吧...
作者: 全海波    时间: 2012-7-28 10:48
  1. for (int i = 0; i < 10; i++)
  2.    Test t = new Test();
  3. 这个当然不行,你想循环对象,可是对象是不能够同名的,你以为是克隆吗?
复制代码

作者: 韦念欣    时间: 2012-7-28 10:49
当然可以这样写,但是这个t被new出来之后就变成垃圾了。没什么意义。
作者: 李菁    时间: 2012-7-28 10:51
这样循环new出来之后,你new了10个名字叫t的对象,没有意义了
作者: 杨志    时间: 2012-7-28 10:55
本帖最后由 杨志 于 2012-7-28 10:57 编辑

这个问题在于重复定义了t;
每次循环开始你都会去执行
Test t ;
那么就等于是定义了10次。

  1. Person t = null;
  2. for (int i = 0; i < 10; i++)
  3.       t = new Person("tt");
复制代码
这样就不会有问题了。这样的话就是说每次去建立对象都赋值给t引用。那么t最后表示的对象将是最后new的一个对象。
建议要new 10个对象的话,就用数组做,或者用集合!这样的建立方式,最后只会有一个对象,而其他的都会被回收掉!
其实当你第一次新建对象的时候。栈区就已经申明了一个t的引用用来保存一个Person对象。
那么在你后面的循环当中,又来申明t引用。这样肯定是不对的。
就好比下面的代码。

  1. int a = 6;
  2. int a = 7;
复制代码
重复定义两个int型的a变量。这样也不行的。因为第一个定义的时候栈区就已经存在了。
但是这样却是可以的。
  1. int a = 6;
  2. a = 7;
复制代码
这样只是去修改栈区的值。而不是又去申明一个a。
作者: 杨志    时间: 2012-7-28 10:59
韦念欣 发表于 2012-7-28 10:49
当然可以这样写,但是这个t被new出来之后就变成垃圾了。没什么意义。


你去测试过了么?能运行?会直接报错的!
作者: 韦念欣    时间: 2012-7-28 11:09
杨志 发表于 2012-7-28 10:59
你去测试过了么?能运行?会直接报错的!

还是这位兄弟分析的到位,学习了!
作者: fiend    时间: 2012-7-28 11:25
杨志 发表于 2012-7-28 10:55
这个问题在于重复定义了t;
每次循环开始你都会去执行
Test t ;

谢谢,分析得蛮到位的。
作者: 魏-玉-彪    时间: 2012-7-28 19:32
本帖最后由 魏-玉-彪 于 2012-7-28 19:34 编辑

for (int i = 0; i < 10; i++)
   Test t = new Test();

等价于

   Test t = new Test();
   Test t = new Test();
   Test t = new Test();
   Test t = new Test();
   Test t = new Test();
   Test t = new Test();
   Test t = new Test();
   Test t = new Test();
   Test t = new Test();

估计你的意思是

for (int i = 0; i < 10; i++)
   Test ti = new Test();
     这样就不是重复  Test t = new Test();了

而是等价于

   Test t 1= new Test();
   Test t2 = new Test();
   Test t 3= new Test();
   Test t 4= new Test();
   Test t 5= new Test();
   Test t 6= new Test();
   Test t7 = new Test();
   Test t8 = new Test();
   Test t9= new Test();





作者: 吴立杰    时间: 2012-7-28 21:09
{:soso_e102:}




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