黑马程序员技术交流社区

标题: [已解决]增强for循环遍历数组,改变数组元素值得问题 [打印本页]

作者: hello world    时间: 2012-8-5 21:58
标题: [已解决]增强for循环遍历数组,改变数组元素值得问题
本帖最后由 刘向阳 于 2012-8-5 22:43 编辑

int[] arr = {3,5,7,9,1};
  for(int i : arr){
   arr[0]=1;
   System.out.println(i);
  }
打印结果还是  3 5 7 9 1
为什么通过arr[0]改变数组第一个元素值后,数组没有被改变。求解释
作者: 焦晨光    时间: 2012-8-5 22:16
本帖最后由 焦晨光 于 2012-8-5 22:22 编辑

Java增强的for循环有以下几个缺点
1.对于数组,不能方便的访问下标值;
2.对于集合,与使用Interator相比,不能方便的删除集合中的内容
增强for循环一个最大的缺点就是 在遍历数组或集合过程中,无法对数组或集合本身进行操作
故 arr[0]=1;并不能在增强for循环中体现出来。
因此 除了用增强for循环简单的遍历并读取数组中的内容外 其他情况下不建议使用增强for循环
作者: 黑马振鹏    时间: 2012-8-5 22:18
格式:for(数据类型 变量名: 被遍历的集合或者数组)
{
}
对集合进行遍历只能获取元素,但是不能对集合进行操作。所以我们没法在用高级for的时候对元素的值进行改变,只能遍历。

楼主代码:
int[] arr = {3,5,7,9,1};
  for(int i : arr){
   arr[0]=1;
   System.out.println(i);
  }

红色标示,其实实际的arr[]中的第一个元素的值已经被改变了,不过在高级for中无法体现。
可以再增加一次遍历查看打印结果:
  1. public class Test1 {
  2.         public static void main(String[] args) {
  3.                

  4.         int[] arr = {3,5,7,9,1};
  5.           for(int i : arr){
  6.            arr[0]=100;
  7.            System.out.println(i);
  8.           }
  9.           System.out.println("------------");
  10.           for(int i:arr){
  11.                   System.out.println(i);
  12.           }
  13. }
  14. }
  15.        
复制代码
3
5
7
9
1
------------
100
5
7
9
1


作者: 樊占江    时间: 2012-8-5 22:20
个人建议:遍历数组就建议用for循环,如果遍历对象,就建议用for in
作者: 徐小骥    时间: 2012-8-5 22:22

int[] arr = {3,5,7,9,1};
  for(int i : arr){
   arr[0]=1;
   System.out.println(i);//这里你打印的是i ,也就是原来的arr中的元素
   System.out.println(arr[0]);//这样打印,值是改变了的
  }
作者: hello world    时间: 2012-8-5 22:26
徐小骥 发表于 2012-8-5 22:22
int[] arr = {3,5,7,9,1};
  for(int i : arr){
   arr[0]=1;

i不就是数组中的元素?
作者: hello world    时间: 2012-8-5 22:34
恩,谢谢给位的帮忙,此问题解决了。
作者: 徐小骥    时间: 2012-8-5 22:57
刘向阳 发表于 2012-8-5 22:26
i不就是数组中的元素?

i 确实是arr中的元素,但是是原来的元素




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