private void test() {
Integer[] ii = new Integer[10];
for (Integer i : ii) {
i = 1;
System.out.print(i);
}

System.out.print("\n");
for (Integer i : ii){
System.out.print(i);
}
}结果是这样:
1111111111
nullnullnullnullnullnullnullnullnullnull更不用说把Integer[]改成int[]了,jdk5 的for 增强循环未免太差了点吧,本来以为只是基础数据类型数组没有作autoboxing,为什么对象数组也这样?
private void test() {
String[] ii = new String[10];
for (String i : ii) {
i = "1_";
System.out.print(i);
}

System.out.print("\n");
for (String i:ii){
System.out.print(i);
}
}
结果也是:
1_1_1_1_1_1_1_1_1_1_
nullnullnullnullnullnullnullnullnullnull

解决方案 »

  1.   

    for增强循环,这里取出来的值就好像参数传递中的一样,窃以为String[] ii=new String[10];
    for(String i:ii)
    {
       i="1_";
    }等同于
    for(int j=0;j<ii.length;j++)
    {
       String i=ii[j];
       //这里进行赋值操作 i="1_" 只相当于对临时变量i赋值,i="1_",而没有操作到ii[j]的实际内容,故赋值没有意义
    }
      

  2.   

    foreach 没法访问定位,也就没办法修改,删除 集合中的内容
    不过它可以
    public class Check{
       public static boolean check(Object...objects){
         boolean result=false;
         for(Object obj:objects){
           if((((String)obj).trim().equals(""))
     return result=true;
         } 
         return result;
       }
    }
    上面的程序是检查输入的n个参数是否是由空格组成
    调用的时候可以输入多个参数 
    如:
    boolean pd1=Check.check("string1");
    boolean pd2=Check.check("string1","string2");
    boolean pd3=Check.check("string1","string2","string3");
    都可以
    Object...objects中第一个Object表示行参类型 第2个objects是行参名 中间三个点是固定写法 大概是表示多个的意思吧 我猜的 HOHO~ ^_^
      

  3.   

    LZ,唉~~你的JAVA基础未免也太差了点吧。啥也不说了,先去看看Java的对象引用和对象复制的概念吧。这不是foreach的问题,是你定义的问题。还要看清Integer i的作用域。
      

  4.   

    看了rickqin(识摄性也)的话,好惭愧啊,终于搞懂了:(