Weil die Java-Sprachspezifikation dies sagt :)
In der Programmiersprache Java werden Objekte (§4.3.1) erzeugt, dynamisch erzeugt und können Variablen vom Typ Objekt (§4.3.2) zugewiesen werden. Alle Methoden der Klasse Object können in einem Array aufgerufen werden.
Im Gegensatz zu C ++ bietet Java also echte Arrays als erstklassige Objekte:
length
Mitglied. clone()
-Methode, die die gleichnamige Methode in der Klasse Object
. Object
. Wenn Arrays zu Objekten gehören, bedeutet das, dass Sie Operationen mit ihnen ausführen können (zB someArray.count ('foo')), anstatt nur gegen sie zu arbeiten (zB count (someArray, 'foo'))) natürlichere Syntax.
Ein weiterer Punkt ist, dass Objekte veränderbar sind und als Referenz übergeben werden. In Arrays gibt es keine Felder / Methoden, mit denen Sie "Eigenschaften" des Arrays ändern können, aber Sie können die Elementwerte sicher ändern. Und die Vorteile der Übergabe von Arrays durch Referenz sind ziemlich offensichtlich (obwohl funktionale Programmierer wahrscheinlich wünschen würden, dass Java unveränderbare Listen wertmäßig weitergegeben hätte).
Bearbeiten: vergessen zu erwähnen. In der Zeit vor dem Autoboxing war es hilfreich, Arrays in Sammlungen speichern zu können, in ObjectStreams usw. zu schreiben.
Dieser Link erklärt, warum Array Objekte in Java sind (am Anfang der Artikel).
Wahrscheinlich, weil sie so nah wie möglich daran sein wollten, alles zu einem Objekt zu machen. Native Typen sind aus Gründen der Abwärtskompatibilität vorhanden.
Ich bin mir nicht sicher über den offiziellen Grund.
Es macht jedoch Sinn für mich, dass sie Objekte sind, weil Operationen an ihnen ausgeführt werden können (wie etwa die Länge) und es sinnvoller ist, diese Operationen als Elementfunktionen zu unterstützen, anstatt neue Schlüsselwörter einzuführen. Andere Operationen umfassen clone (), die vererbten Operationen von Objekten usw. Arrays sind ebenfalls hashbar und potentiell vergleichbar.
Dies unterscheidet sich von C (und nativen Arrays in C ++), wobei Ihre Arrays im Wesentlichen Zeiger auf einen Speicher-Offset sind.