A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蔡汉康 中级黑马   /  2012-10-26 20:25  /  1826 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 蔡汉康 于 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);

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

11 个回复

正序浏览
崔政 中级黑马 2012-10-27 18:22:56
12#
我给你从高级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. }

复制代码
回复 使用道具 举报
徐升兴 发表于 2012-10-26 22:06
你的for循环内让s="kk",这样做是没有改变集合中的元素的,这里的s是把集合中的元素取出来,然后对取出的 ...

哦,,,,,恍然大悟,谢谢你
回复 使用道具 举报
蔡汉康 发表于 2012-10-26 21:55
我代码改好了,你再看下

你的for循环内让s="kk",这样做是没有改变集合中的元素的,这里的s是把集合中的元素取出来,然后对取出的元素进行重新复制,而不是对集合中的元素进行改变
增强for也没有这个功能,增强for只能做取出动作,不能增,改,删
回复 使用道具 举报
刘丽娜 发表于 2012-10-26 21:41
在上面回复你了

我代码又改了,麻烦你再看下哈,不好意思
回复 使用道具 举报
徐升兴 发表于 2012-10-26 21:41
首先你这个代码有问题,你把打印S放在循环外,这个s的引用在循环内部,你的输出语句根本就找不到这个s,如 ...

我代码改好了,你再看下
回复 使用道具 举报
首先你这个代码有问题,你把打印S放在循环外,这个s的引用在循环内部,你的输出语句根本就找不到这个s,如果你把输出语句放进循环内,就是每取一个集合中元素就对它进行赋值为“kk”
那么你会打印出来三个kk
回复 使用道具 举报
刘丽娜 发表于 2012-10-26 20:32
我验证了你的代码 输出的是3个ss  不是你说的结果呀  你在仔细看看吧
代码我又改完了,请你再看一下,是为什么

在上面回复你了
回复 使用道具 举报
你要是这么写的话 那就会报错的  因为s 是局部变量只有在for循环体内才有效的 你在外面引用不到的
回复 使用道具 举报
刘丽娜 发表于 2012-10-26 20:32
我验证了你的代码 输出的是3个ss  不是你说的结果呀  你在仔细看看吧

代码我又改完了,请你再看一下,是为什么
回复 使用道具 举报
刘丽娜 发表于 2012-10-26 20:32
我验证了你的代码 输出的是3个ss  不是你说的结果呀  你在仔细看看吧

代码我又改完了,请你再看一下,是为什么
回复 使用道具 举报
我验证了你的代码 输出的是3个ss  不是你说的结果呀  你在仔细看看吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马