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

© 晏文根 初级黑马   /  2012-6-17 12:40  /  2547 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

增强for循环只能对数组或者集合进行遍历,不能改变其值
package cn.xuzheng.test;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
/**
* 说明增强for循环只能遍历数组或者集合,不能对其进行增删改查等改变数据的操作
*@author xz
*@version 1.0 2012-5-23
*@Richard
*/
public class MapDemo1 {
@Test
public void test1(){
int[] arr= new int[5];
for(int num:arr){
num=1;
System.out.println(arr[0]);
}
}
@Test
public void test2(){
List<String> list=new ArrayList<String>();
list.add("aaa");
for(String str:list){
str="bbb";
System.out.println(list.get(0));
}
}
}
结果:
0
0
0
0
0
aaa
我原来本来打算把这当做定理几下,可是刚到张老师高新技术视频中看到:图片上那段代码,它确实在增强for循环中,改变了传入参数String类型的值。。。。

FOR.PNG (30.95 KB, 下载次数: 64)

FOR.PNG

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
增强For循环是要有源目标才行的,就是说要遍历的目标必须已经确确实实存在了才可以用增强for循环,张老师视频里面改变值的并不是增强for循环,而是在for循环里面调用了变量的set方法覆的值,就像你用迭代器Iterator遍历集合时用remove一样,这个有问题么?
回复 使用道具 举报
嗯,明白了,,那为什么增强for循环中的值改不了哦?
回复 使用道具 举报
额,我上面说错了,在Iterator里面是不能用remove的,因为迭代器操作的过程中,源是不能改变的,对不起啊!For增强里面的值为什么不能改变,因为它是定义了一个变量来接受源的副本,比如你有字符串,str1 = "abc", 然后你定义了一个新字符串,str2,str2 = str1,然后你改变str2,跟str1一点关系都没有,所以说增强for循环里改变不了源值,但是如果你掉用某个方法,比如说在for循环的过程中直接调用str1还是可以的!!张老师的就是这样!
回复 使用道具 举报
对于Iterator我也看了下,,你后面说的有道理
对于for这个,我明白了。。。。不过真的很佩服你,能够这么清楚的记得自己曾经写错的,,原来孔子说的“不贰过”真存在哦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马