日期:2014-05-20  浏览次数:20704 次

JDK 5 的for增强型循环问题。
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


------解决方案--------------------
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]的实际内容,故赋值没有意义
}
------解决方案--------------------
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~ ^_^