Also deklariere und initialisiere ich ein int-Array:
static final int UN = 0;
int[] arr = new int[size];
for (int i = 0; i < size; i++) {
arr[i] = UN;
}
Sagen Sie, ich mache das stattdessen ...
int[] arr = new int[5];
System.out.println(arr[0]);
... 0
wird nach Standard gedruckt. Auch wenn ich das mache:
static final int UN = 0;
int[] arr = new int[5];
System.out.println(arr[0]==UN);
... true
wird nach Standard gedruckt. Wie initialisiert Java mein Array standardmäßig? Ist es sicher anzunehmen, dass die Standardinitialisierung das Festlegen der Array-Indizes ist, 0
was bedeuten würde, dass ich das Array nicht durchlaufen und initialisieren muss?
Vielen Dank.
java
arrays
initialization
Hristo
quelle
quelle
Antworten:
Alles in einem Java-Programm, das vom Programmierer nicht explizit auf etwas gesetzt wurde, wird auf einen Nullwert initialisiert.
null
.0
.0.0
false
.'\u0000'
(dessen Dezimaläquivalent 0 ist).Wenn Sie ein Array von etwas erstellen, werden auch alle Einträge auf Null gesetzt. So Ihr Array fünf Nullen enthält Recht , nachdem es erstellt durch
new
.Hinweis (basierend auf Kommentaren): Die Java Virtual Machine muss beim Zuweisen lokaler Variablen den zugrunde liegenden Speicher nicht auf Null setzen (dies ermöglicht bei Bedarf effiziente Stapeloperationen). Um zufällige Werte zu vermeiden, müssen in der Java-Sprachspezifikation lokale Variablen initialisiert werden.
quelle
Aus der Java-Sprachspezifikation :
quelle
null
.JLS sagt klar
Ein Array-Initialisierer erstellt ein Array und stellt Anfangswerte für alle seine Komponenten bereit.
und dies ist unabhängig davon, ob das Array eine Instanzvariable oder eine lokale Variable oder eine Klassenvariable ist.
Standardwerte für primitive Typen: docs
Für Objekte sind die Standardwerte
null
.quelle
Laut Java
quelle
Thorbjørn Ravn Andersen antwortete für die meisten Datentypen. Da es eine hitzige Diskussion über Array gab,
Zitieren aus der jls-Spezifikation http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.5 "Array-Komponente wird beim Erstellen mit einem Standardwert initialisiert"
Ich denke, unabhängig davon, ob Array lokal oder Instanz oder Klassenvariable ist, wird es mit Standardwerten
quelle
Jede Klasse in Java hat einen Konstruktor (ein Konstruktor ist eine Methode, die aufgerufen wird, wenn ein neues Objekt erstellt wird, das die Felder der Klassenvariablen initialisiert). Wenn Sie also eine Instanz der Klasse erstellen, wird beim Erstellen des Objekts die Konstruktormethode aufgerufen, und alle Datenwerte werden zu diesem Zeitpunkt initialisiert.
Für Objekte vom Typ Integer Array werden alle Werte im Array in der Konstruktormethode auf 0 (Null) initialisiert. In ähnlicher Weise werden für ein Objekt eines booleschen Arrays alle Werte mit false initialisiert.
Daher initialisiert Java das Array, indem es beim Erstellen des Objekts seine Konstruktormethode ausführt
quelle
Java gibt an, dass die Standardlänge eines JAVA-Arrays zum Zeitpunkt der Initialisierung 10 beträgt.
Die
size()
Methode gibt jedoch die Anzahl der eingefügten Elemente im Array zurück. Wenn Sie zum Zeitpunkt der Initialisierung kein Element in das Array eingefügt haben, wird Null zurückgegeben.quelle