Array von Arrays

F: Wie verwende ich ein Array von Arrays?

EIN:

String s = neuer String ("Hallo Welt"); // s ist eine String-Referenz, die auf ein // String-Objekt mit dem Wert "Hello, World" verweist. s = neuer String ("Guten Tag, Welt"); // Dieselbe String-Referenz s verweist jetzt // auf ein anderes String-Objekt; Das heißt, // eine einzelne Referenz hat sich (nacheinander) auf zwei // verschiedene Objekte bezogen. // (Beachten Sie, dass wir jetzt ein // String-Objekt mit dem Wert "Hello, World" haben, das keine // Referenzen hat; daher kann dieses Objekt // als Müll gesammelt werden) String t; // t ist eine String-Referenz mit einem Nullwert // (bezieht sich nicht auf ein Objekt). // Wenn Sie an dieser Stelle versuchen, t zu verwenden, z. B. indem Sie // int len ​​= t.length; Sie erhalten eine // NullPointerException (sollte // NullReferenceException heißen). t = s;// Die String-Referenz t bezieht sich jetzt auf dasselbe // Objekt, auf das die String-Referenz s verweist, // nämlich auf ein String-Objekt mit dem Wert "Guten Tag, Welt". // Hier haben wir also zwei // Verweise auf ein einzelnes Objekt (gleichzeitig).

Arrays in Java sind eigenständige Objekte, unabhängig davon, ob sie Grundelemente ( ints, chars, booleans usw.) oder andere Objekte enthalten. Dies bedeutet, dass Arrays wie jedes andere Objekt bezeichnet werden, wobei die []Aggregations- / Dereferenzierungssemantik hinzugefügt wird. Hier ist ein Beispiel:

String [] sa; // sa ist eine Nullreferenz // Der Versuch, auf sa.length zuzugreifen, führt zu einer NullPointerException. sa = neuer String [2]; // sa ist keine Nullreferenz mehr, sondern verweist auf ein bestimmtes // Objekt, das ein Array von zwei Null-String-Referenzen ist. // sa.length ist jetzt gleich 2 // (sa [0] und sa [1] sind die beiden Null-String-Referenzen). sa [0] = "Hallo Welt"; sa [1] = "Guten Tag, Welt"; // Jetzt bezieht sich sa auf ein Array von zwei Nicht-Null-String-Referenzen. sa = neuer String [1]; // sa.length ist gleich 1 // Dieselbe Referenz sa bezieht sich jetzt auf ein anderes // (und kürzeres) Array. // sa [0] ist eine Null-String-Referenz. // Der Versuch, auf sa [1] zuzugreifen, verursacht eine // ArrayIndexOutOfBoundsException. sa [0] = "Hallo Welt"; // sa [0] ist jetzt nicht null.

Ihre Frage zu Arrays kann unter Berücksichtigung dieser Frage beantwortet werden

String [] [] saa; saa [0] [0] = "Hilfe";

verursacht a NullPointerException, weil saaes sich um eine Nullreferenz handelt - das heißt, es saabezieht sich nicht auf ein Objekt. Um dem ersten Element des ersten Arrays einen Wert zuzuweisen, saamuss auf ein Array mit einer Länge größer als Null und saa[0]auf ein Nicht-Null-String-Array verweisen, dessen Länge ebenfalls größer als Null ist. Man könnte also sagen:

String [] [] saa; // saa ist eine Nullreferenz auf ein Array von String-Arrays // Der Versuch von saa.length führt bereits zu einer NullPointerException, // wie der Versuch von saa [0]. saa = neuer String [1] []; // saa bezieht sich jetzt auf ein Array mit 1 Nullreferenz auf einen String []. // saa.length ist gleich 1. // saa [0] ist null. saa [0] = neuer String [2]; // saa bezieht sich jetzt auf ein Array von 1 Nicht-Null-Referenz // auf einen String [] der Länge 2. // saa.length ist immer noch gleich 1. // saa [0] .length ist gleich 2 (aber saa [0] [0] und // saa [0] [1] sind beide null). saa [0] [0] = "Hallo Welt"; saa [0] [1] = "Guten Tag, Welt"; // Jetzt sind saa [0] [0] und saa [0] [1] beide nicht null.

Beachten Sie, dass Sie nicht verweisen können, saa[0][0]bis nicht saa[0]null ist, und dass Sie nicht saa[0]null machen können, bis Sie nicht null machen saa. Grundsätzlich müssen Sie Ihr Array von Arrays schrittweise aufbauen.

Es gibt eine benutzerfreundliche Abkürzung zum Initialisieren von Array-Referenzen:

String [] [] saa = {{{"Hallo Welt}, {" Guten Tag, Welt "}}}; // Dadurch wird ein String [] [] -Objekt wie das oben erstellte // erstellt und saa zugewiesen Verweisen Sie auf dieses Objekt. // Das Leerzeichen soll betonen, dass das // erstellte Objekt ein Array aus einem String [] ist, // der zwei Strings enthält. 

Mit dieser Kurzform könnte unser Beispiel korrekt geschrieben werden als:

String [] [] saa = {{{"Help"}}}; 

Dies bezieht saasich jedoch auf ein einzelnes String-Array. Beachten Sie, dass die obige Syntax nur beim Initialisieren einer Array-Referenz funktioniert (die Initialisierung ist der Sonderfall der Zuweisung zum Zeitpunkt der Deklaration). Die allgemeinere Möglichkeit, ein neues Array zu erstellen und es einer neuen oder vorhandenen Array-Referenz zuzuweisen, sieht folgendermaßen aus (im Fall einer vorhandenen Referenz):

saa = new String [] [] {// beachte das leere [] [] - der Compiler ermittelt die // Größe heraus (leer [] [] ist erforderlich). {{"Hallo"}, {"Welt"}} // das ist saa [0], // beachte das Komma zwischen saa [0] und saa [1] {{"Guten Tag"}, {"Welt"} } // das ist saa [1]}; // jetzt saa.length = 2 und saa [0] und saa [1] haben ebenfalls jeweils die Länge 2
Random Walk Computing ist die größte Java / CORBA-Beratungsboutique in New York und konzentriert sich auf Lösungen für Finanzunternehmen. Die Berater von Random Walk, die für ihre hochmoderne Java-Expertise bekannt sind, veröffentlichen und sprechen in einigen der angesehensten Foren der Welt über Java.

Diese Geschichte "Array of Arrays" wurde ursprünglich von JavaWorld veröffentlicht.