Nein, in C ++ ist ein Array ein Array und kein Array.
Kerrek SB
42
if (array instanceof Object) System.out.println("Yes!")
Skaffman
6
Oh, und in C ++ sind sowohl Arrays als auch Zeiger Objekte.
R. Martinho Fernandes
2
@ R.MartinhoFernandes Alle C ++ - Arrays sind zwar C ++ - Objekte, aber es gibt C ++ - Zeiger, die keine C ++ - Objekte sind, nämlich alle Zeiger, die das Ergebnis der Auswertung eines r-Werts sind. Beispiele hierfür sind &x, p+iund new int(42).
Fredoverflow
1
@skaffman Die Nachricht ist nicht unbedingt erforderlich, da sie sonst nicht kompiliert würde.
Shmosel
Antworten:
197
Ja.
Der Abschnitt 4.3.1 der Java-Sprachspezifikation beginnt mit:
Ein Objekt ist eine Klasseninstanz oder ein Array.
Bisher habe ich immer angenommen, dass ein Objekt gleichbedeutend mit einer Klasseninstanz ist und dass Arrays eine spezielle Sprachfunktion sind oder so.
In der Programmiersprache Java sind Arrays Objekte (§4.3.1), werden dynamisch erstellt und können Variablen vom Typ Object (§4.3.2) zugewiesen werden. Alle Methoden der Klasse Object können in einem Array aufgerufen werden.
Wenn Array ein Objekt ist, heißt das nicht, dass es eine Instanz einer Klasse ist? Wenn ja, kann ich diese Klasse erweitern?
Eins Zwei Drei
9
Nein, das tut es nicht: Die Java-Spezifikation schreibt : "Ein Objekt ist eine Klasseninstanz oder ein Array. Eine Klasseninstanz wird explizit durch einen Ausdruck zur Erstellung einer Klasseninstanz erstellt (§15.9). Ein Array wird explizit durch einen Ausdruck zur Erstellung eines Arrays erstellt (§15.10). ". Und nein, man kann nicht ein Array erweitern, weil die Klausel erstreckt muss eine Classtype verfügen.
Sie können auch int[] someIntegers = {42};das gleiche Ergebnis deklarieren .
Holger
7
Ja, es ist ein Objekt in Java.
Beachten Sie außerdem, dass Sie in diesem array.lengthFall keine Methoden aufrufen, sondern nur auf das Feld des Arrays zugreifen length. In der Arrays- Klasse gibt es viele statische Methoden .
Es ist wichtig zu beachten, dass Arrays in Java ihre eigenen Bytecodes haben, die sie nicht mit Objekten teilen. Sie sind sicherlich Objekte, werden aber auf niedriger Ebene etwas anders gehandhabt.
Ich würde sagen, die Antwort lautet ja, obwohl ich hinzufügen könnte, dass ein Array genau genommen auch in C ++ ein Objekt ist. Aus §1.8 [intro.object] des aktuellen Standards (FDIS):
Jedes Array in Java ist ein Objekt ex int [] a = new int [2]; So wird new verwendet, um ein Objekt zu erstellen, und da es sich um ein Objekt handelt, können wir den Klassennamen nur mit a.getClass () überprüfen. GetName ();
Die Mitglieder eines Array-Typs sind alle die folgenden:
Das öffentliche letzte Feld length, das die Anzahl der Komponenten des Arrays enthält. Länge kann positiv oder Null sein.
Die öffentliche Methode clone, die die gleichnamige Methode in der Klasse überschreibt Objectund keine geprüften Ausnahmen auslöst. Der Rückgabetyp der cloneMethode eines Array-Typs T[]ist T[].
Ein Klon eines mehrdimensionalen Arrays ist flach, dh es wird nur ein einziges neues Array erstellt. Subarrays werden gemeinsam genutzt.
Alle von der Klasse Object geerbten Mitglieder; Die einzige Methode von Object, die nicht vererbt wird, ist die Klonmethode.
if (array instanceof Object) System.out.println("Yes!")
&x
,p+i
undnew int(42)
.Antworten:
Ja.
Der Abschnitt 4.3.1 der Java-Sprachspezifikation beginnt mit:
quelle
Ja; Die Java-Sprachspezifikation schreibt :
quelle
Fragen wir Java!
Ausgabe:
quelle
int[] someIntegers = {42};
das gleiche Ergebnis deklarieren .Ja, es ist ein Objekt in Java.
Beachten Sie außerdem, dass Sie in diesem
array.length
Fall keine Methoden aufrufen, sondern nur auf das Feld des Arrays zugreifenlength
. In der Arrays- Klasse gibt es viele statische Methoden .quelle
Es ist wichtig zu beachten, dass Arrays in Java ihre eigenen Bytecodes haben, die sie nicht mit Objekten teilen. Sie sind sicherlich Objekte, werden aber auf niedriger Ebene etwas anders gehandhabt.
quelle
Ich würde sagen, die Antwort lautet ja, obwohl ich hinzufügen könnte, dass ein Array genau genommen auch in C ++ ein Objekt ist. Aus §1.8 [intro.object] des aktuellen Standards (FDIS):
quelle
Ich möchte nur hinzufügen, dass Arrays eine Darstellung in der Reflection-API haben - java.lang.reflect.Array .
quelle
Jedes Array in Java ist ein Objekt ex int [] a = new int [2]; So wird new verwendet, um ein Objekt zu erstellen, und da es sich um ein Objekt handelt, können wir den Klassennamen nur mit a.getClass () überprüfen. GetName ();
quelle
java.util.Object
java.util.Arrays
ist eine Hilfsklasse, und Arrays sind keine Instanzen dieser Klasse.java.lang.reflect.Array
ist eine Hilfsklasse, und Arrays sind keine Instanzen dieser Klasse.Arrays erben alle Mitglieder von
java.lang.Object
Arrays überschreiben die von
clone()
geerbte MethodeObject
.Arrays implementieren das Feld
length
, das die Anzahl der Komponenten des Arrays enthält. Länge kann positiv oder Null sein. Es istpublic
undfinal
.Arrays implementieren die Schnittstellen
Cloneable
undjava.io.Serializable
.8a. Arrays werden unterstützt von
Class<T>
. Sie können dieClass<T>
Instanz von einer Array-Instanz abrufenoder von einem Array-Typ
8b.
java.lang.Class<T>
Für jeden Array-Typ in Ihrem Code wird eine eindeutige Reflexionsklasseninstanz (dh eine Instanz von ) erstellt. BeispieleVERWEISE
Aus der Java-Spezifikation Abschnitt 4.3.1 Objekte
Ein Objekt ist eine Klasseninstanz oder ein Array.
Eine Klasseninstanz wird explizit durch einen Ausdruck zur Erstellung einer Klasseninstanz erstellt.
Ein Array wird explizit durch einen Arrayerstellungsausdruck erstellt.
Von java.util.Arrays
Von java.lang.reflect.Array
Ab Abschnitt 10.1 Objekte
Die direkte Oberklasse eines Array-Typs ist
Object
.Jeder Array-Typ implementiert die Schnittstellen
Cloneable
undjava.io.Serializable
.Ab Abschnitt 10.7 Array-Mitglieder
Die Mitglieder eines Array-Typs sind alle die folgenden:
Das öffentliche letzte Feld
length
, das die Anzahl der Komponenten des Arrays enthält. Länge kann positiv oder Null sein.Die öffentliche Methode
clone
, die die gleichnamige Methode in der Klasse überschreibtObject
und keine geprüften Ausnahmen auslöst. Der Rückgabetyp derclone
Methode eines Array-TypsT[]
istT[]
.Ein Klon eines mehrdimensionalen Arrays ist flach, dh es wird nur ein einziges neues Array erstellt. Subarrays werden gemeinsam genutzt.
Alle von der Klasse Object geerbten Mitglieder; Die einzige Methode von Object, die nicht vererbt wird, ist die Klonmethode.
quelle
Arrays von irgendetwas sind Objekte. Man kann Methoden aufrufen , wie
equals
,hashcode
etc:Man kann keine Methoden für einen nativen Typ aufrufen.
quelle
Beachten Sie das folgende Code-Snippet und die Ausgabe.
}}
Array a wird eindeutig als Objekt behandelt.
quelle