int a=2;int b=a;b=1;我们先来看看这个,大家可以想想a的值会变成1吗?不会,因为int是基本数据类型,是值的传递,所以a不会变化,那我们再来看看int【】c={1,2};for(int i:c){i=3};可以理解成int i=c【0】;i=3;所以c【0】的值不会发生变化,如果是引用数据类型,情况不一样了,因为是地址的传递。

解决方案 »

  1.   

    foreach只适合遍历输出,要想玩赋值就老实的用一般的写法
      

  2.   

    特别是你将forech写法转换成相同功能的for一般写法你就能知道具体差别了
      

  3.   

    fore底层是用Iterator,这个只能看看,不能增删改,唉,好好看看
      

  4.   

    我去,我发现我提了个同样问题,回答得也是楼上两位
    使用for each分配object array的问题 
    不过话说您也忒小气了,才给20分但是楼上说foreach底层就是Iterator的明显只说对了一半啊,array就没有支持Iterable<T>接口这一说标准答案还是看JLS吧14.14.2. The enhanced for statementfor (I #i = Expression.iterator(); #i.hasNext(); ) {
        {VariableModifier} TargetType Identifier =
            (TargetType) #i.next();
        Statement
    }T[] #a = Expression;
    L1: L2: ... Lm:
    for (int #i = 0; #i < #a.length; #i++) {
        {VariableModifier} TargetType Identifier = #a[#i];
        Statement
    }都是先赋值给一个临时变量,再在其上操作,所以你赋值不起作用
      

  5.   

    楼主想辩论这个问题 用普通for更有说服力 高级for底层是迭代器 改不了值