java中for循环和foreach循环的区别?
看下面这段简单的java代码:
class Apple{
Apple() { System.out.println("Apple() "); }
public String toString() {
return ("I have a apple");
}
}
public class Test{
Apple[] ap = new Apple[2];
{
for(Apple x : ap) //foreach循环
x=new Apple();
}
// { //for循环
// for(int i=0;i<2;i++)
// ap[i]=new Apple();
// }
public static void main(String[] args) {
Test ts = new Test();
for(int i=0; i<2; i++)
System.out.println(ts.ap[i]);
}
}
其中foreach那一段应该对那个Apple类数组产生两个实例对象,但是在main函数输出中两个输出却都是null,就是空引用。如果将foreach那一段替换为for循环那一段,则确实创建了Apple的两个实例对象,因此输出了两个"I have a apple"。这到底是为什么呢。foreach中x作为ap元素的引用别名,如果它创建了对象,应该ap中的元素指向这两个对象才对,即使x随着foreach循环结束而没有了,怎么到后来数组并没有指向x创建的两个类实例对象呢?疑惑中,请高手解答。我用的jdk版本是1.5的