黑马程序员技术交流社区

标题: for each 循环的小疑问 [打印本页]

作者: luheqi    时间: 2014-6-29 20:28
标题: for each 循环的小疑问
本帖最后由 luheqi 于 2014-6-30 20:14 编辑

boolean[] arrs = new boolean[persons];
        for (int i = 0; i < arrs.length; i++) arrs = true;//此句正常运行

       for (boolean arr : arrs) {   arr = true;   }//此句运行时没达到赋值效果,引起后续程序进入死循环

作者: hhnog    时间: 2014-6-30 00:11
没看到你的foreach
作者: gtf    时间: 2014-6-30 08:18
布尔型的数组没赋值的时候默认是flase
作者: luheqi    时间: 2014-6-30 16:26
gtf 发表于 2014-6-30 08:18
布尔型的数组没赋值的时候默认是flase

是的,但是这与 for (boolean arr : arrs){ arr = true }有什么冲突吗?这个循环条件难道不是以arrs数组的长度作为条件的吗?
作者: houyudong    时间: 2014-6-30 17:00
你这个定义了动态的一维数组,里面根本就没有传入参数,而且你那个persons是什么?一个类?还是自定义的变量?
作者: luheqi    时间: 2014-6-30 19:17
houyudong 发表于 2014-6-30 17:00
你这个定义了动态的一维数组,里面根本就没有传入参数,而且你那个persons是什么?一个类?还是自定义的变 ...

传入的一个变量,在我这里是100
作者: 寻得美好    时间: 2014-6-30 19:54
arrs=ture;这个能将ture赋给arrs?
作者: luheqi    时间: 2014-6-30 20:09
本帖最后由 luheqi 于 2014-6-30 20:12 编辑

改成int[] 数组发现变量没变,达不到效果。下面是网友的总结,很不错:

我们在foreach循环中对数组元素进行赋值,结果导致不能正确遍历数组元素,不能准确取出每个数组元素的值。而且当我们再次访问第一个数组元素时,发现数组元素的值依然没有改变。不难看出,当使用foreach来迭代访问数组元素时,foreach中的循环变量相当于一个临时变量,系统会把数组元素依次赋给这个临时变量而这个临时变量并不是数组元素它只是保存了数组元素的值。因此,如果希望改变数组元素的值,则不能使用这种foreach循环。

使用foreach循环迭代数组元素时,并不能改变数组元素的值,因此不要对foreach的循环变量进行赋值。
作者: fantacyleo    时间: 2014-6-30 20:26
运行没有问题,死循环应该不是foreach造成的。不过你这样foreach是达不到赋值的目的的




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