Ich werde schnell zu dem Problem tauchen. Ich habe eine einfache Klasse
%Vor%und eine andere Klasse hat ein Array dieser Objekte als Member
%Vor%Ich initialisiere es so:
%Vor%Aber wenn ich versuche, auf die Mitglieder dieser Objekte in diesem Array zuzugreifen, bekomme ich eine NullPointerException direkt auf meine Stack-Trace. Das heißt, Objekte des Arrays wurden nicht konstruiert. Auf der anderen Seite funktioniert dieser traditionellere Code einfach perfekt:
%Vor%Wie diese Diskussion darauf hinweist, sollten beide dies tun sei nach der Kompilation gleich.
Meine Frage ist, warum für jede Schleife das Initialisieren / Konstruieren von Objekten aus dem Elementarray fehlschlägt?
In Ihrem for-each-Beispiel überschreiben Sie die lokale Variable der Schleife, die nicht in das Array zurückgespeichert wird. Es ist ähnlich wie in Ihrer zweiten Schleife:
%Vor%Lesen Sie Verständnis für jede Schleife in Java , um das gleiche Problem zu lösen .
Beide Schleifen sind für den Zugriff auf Elemente aus einem Array gleich, aber nicht für deren Initialisierung. Wenn Sie in diesem Szenario eine for-each-Schleife verwenden, ist das wie
%Vor% Sie weisen dem Array nicht das neue Vector
zu, sondern ordnen es stattdessen einer lokalen Variablen zu.
In Ihrem ersten Beispiel ist v
nur innerhalb der for-Schleife verfügbar. Wenn Sie v = new Vector();
v ist aktualisiert, aber nicht Puffer [i]. v zeigte vorher auf [i], jetzt zeigt es auf einen neuen Vektor, buffer[i]
bleibt als null
übrig.