为什么每个循环都不起作用?

Geo*_*son 2 java foreach loops for-loop

我有这个代码不起作用:

Panel[] panelArr = new Panel[5];

for (Panel p:panelArr) {
    p = new Panel();
}
Label lblName = new Label("Name:");
panelArr[0].add(lblName);
Run Code Online (Sandbox Code Playgroud)

它出现了错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at GUIVehicles$NewSportsCarDialog.<init>(GUIVehicles.java:65)
Run Code Online (Sandbox Code Playgroud)

但是,如果我用for循环替换for-each循环,它就可以工作.

for (int i = 0; i < 5; i++) {
    panelArr[i] = new Panel();
}
Run Code Online (Sandbox Code Playgroud)

据我所知,通过每个循环的文档来看,两个for循环应该是等价的.显然情况并非如此,我想知道为什么?

ars*_*jii 8

你的每个人都是这样的:

for (int i = 0; i < 5; i++) {
    Panel p = panelArr[i];
    p = new Panel();
}
Run Code Online (Sandbox Code Playgroud)

因此,赋值对p数组本身没有任何影响 - 你只是重定向p到其他地方,这与数组没有关系.因此,在for-each循环结束时,所有数组元素仍然是null.你的第二个片段是填充数组的适当方法.