黑马程序员技术交流社区

标题: 问一个增强for循环的问题 [打印本页]

作者: 蔡汉康    时间: 2012-10-26 20:25
标题: 问一个增强for循环的问题
本帖最后由 蔡汉康 于 2012-11-7 21:56 编辑

ArrayList<String> al = new ArrayList<String>();
                al.add("abc1");
                al.add("abc2");
                al.add("abc3");
                for(String s : al)
                {
                        s = "kk";        //这里对集合中的元素修改,可是打印的结果还是abc1,abc2,abc3......为什么?
                }
                System.out.println(al);
作者: 刘丽娜    时间: 2012-10-26 20:32
我验证了你的代码 输出的是3个ss  不是你说的结果呀  你在仔细看看吧
作者: 蔡汉康    时间: 2012-10-26 21:10
刘丽娜 发表于 2012-10-26 20:32
我验证了你的代码 输出的是3个ss  不是你说的结果呀  你在仔细看看吧

代码我又改完了,请你再看一下,是为什么
作者: 蔡汉康    时间: 2012-10-26 21:10
刘丽娜 发表于 2012-10-26 20:32
我验证了你的代码 输出的是3个ss  不是你说的结果呀  你在仔细看看吧

代码我又改完了,请你再看一下,是为什么
作者: 刘丽娜    时间: 2012-10-26 21:40
你要是这么写的话 那就会报错的  因为s 是局部变量只有在for循环体内才有效的 你在外面引用不到的
作者: 刘丽娜    时间: 2012-10-26 21:41
刘丽娜 发表于 2012-10-26 20:32
我验证了你的代码 输出的是3个ss  不是你说的结果呀  你在仔细看看吧
代码我又改完了,请你再看一下,是为什么

在上面回复你了
作者: 徐升兴    时间: 2012-10-26 21:41
首先你这个代码有问题,你把打印S放在循环外,这个s的引用在循环内部,你的输出语句根本就找不到这个s,如果你把输出语句放进循环内,就是每取一个集合中元素就对它进行赋值为“kk”
那么你会打印出来三个kk
作者: 蔡汉康    时间: 2012-10-26 21:55
徐升兴 发表于 2012-10-26 21:41
首先你这个代码有问题,你把打印S放在循环外,这个s的引用在循环内部,你的输出语句根本就找不到这个s,如 ...

我代码改好了,你再看下
作者: 蔡汉康    时间: 2012-10-26 21:56
刘丽娜 发表于 2012-10-26 21:41
在上面回复你了

我代码又改了,麻烦你再看下哈,不好意思
作者: 徐升兴    时间: 2012-10-26 22:06
蔡汉康 发表于 2012-10-26 21:55
我代码改好了,你再看下

你的for循环内让s="kk",这样做是没有改变集合中的元素的,这里的s是把集合中的元素取出来,然后对取出的元素进行重新复制,而不是对集合中的元素进行改变
增强for也没有这个功能,增强for只能做取出动作,不能增,改,删
作者: 蔡汉康    时间: 2012-10-26 22:12
徐升兴 发表于 2012-10-26 22:06
你的for循环内让s="kk",这样做是没有改变集合中的元素的,这里的s是把集合中的元素取出来,然后对取出的 ...

哦,,,,,恍然大悟,谢谢你
作者: 崔政    时间: 2012-10-27 18:22
我给你从高级for变成低级for你就明白了
  1. package test;
  2. import java.util.*;
  3. class  Test2{
  4.      public static void main(String[] args) {
  5.              ArrayList<String> al = new ArrayList<String>();
  6.          al.add("abc1");
  7.          al.add("abc2");
  8.          al.add("abc3");
  9.          /*
  10.          for(String s : al)
  11.          {
  12.                  s = "kk";        //这里对集合中的元素修改,可是打印的结果还是abc1,abc2,abc3......为什么?
  13.          }
  14.          System.out.println(al);
  15.           */
  16.          
  17.          //上面注释的代码等同于
  18.          for(int i=0;i<al.size();i++){
  19.                  String s=al.get(i);
  20.                  s="kk";//这和al有关系么?  String s:al  给我的感觉是遍历取出里面的值,然后赋值给s
  21.          }
  22.          System.out.println("改变前的:"+al);
  23.          //你要是非要变
  24.          for(int i=0;i<al.size();i++){
  25.                  al.set(i, "kk");
  26.          }
  27.          System.out.println("改变后的:"+al);
  28.       }
  29. }

复制代码





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