Java Arrays und komplexe Datentypen?
int[ ] i = new int[5];
=> Ich habe eine Referenzvariable i deklariert, die auf ein Objekt (ein Array) zeigt/verweist. Das Objekt (Array) beinhaltet 5 int-Variablen.
String[ ] s = new String[5];
=> ... Referenzvariable s deklariert, die auf ein Objekt (Array) zeigt/verweist. Das Objekt (Array) beinhaltet 5 String-Variablen.
a) Verstehe ich dies soweit richtig?
so nun habe ich z. B. selbst eine Klasse geschrieben
public class MyClass...
Nun
MyClass[ ] myC = new MyClass[5];
=> Ich habe 5 Referenzezvariablen angelegt
myC = new MyClass( );
Ich reserviere Speicher für die 5 Objekte, auf die ich mittels myC[...] referenzieren kann.
b) Warum muss ich diesen Weg gehen, wenn ich die Klasse selbst geschrieben habe? Warum ist es in diesem Fall nicht ausreichend einfach nur
MyClass[ ] myC = new MyClass[5]; zu schreiben?
MyClass[ ] myC = new MyClass[5];
=> 5 Referenzen erstellt
myC[0] = new MyClass(5, "heute" );
=> Rufe den Konstruktor von MyClass auf und übergebe ihn eine 5 als int und einen String "heute".
Nun habe ich Speicher reserviert und die Referenz
myC[0] verweist auf ein Objekt der MyClass-Klasse. Das Objekt hat die Attribute 5 und "heute".
2 Antworten
a)
ersteres soweit richtig
zweiteres fast. ihr verwechselt variablen und referenzen.
referenz = abstraktion eines Zeigers auf Objekte (werden manchmal synonym zu objekte benutzt)
Zeiger = zeigt auf die adresse einer bestimmten speicherregion (in javas fall objekte)
variablen = im code quasi eine kiste wo der programmierer referenzen speichert oder primitive datentypen (zahlen, wahrheitswerte, buchstaben). auf diese kann man zugreifen anhand vom namen
also wenn du ein String-Array erstellst, enthält dieses nicht referenzvariablen sondern referenzen. außerdem sind diese auf die NULL-Referenz gesetzt, weil das Array keine richtigen Strings enthält. beim int-Array ist das nicht der fall, da primitive daten nicht auf NULL gesetzt werden können und stattdessen auf einen standardwert (in deinem fall 0) gesetzt werden
b)
auch keine ahnung worauf du hinaus willst, aber deine ergänzung stimmt soweit. in deinem beispiel wäre ein fehler aufgetreten
zu a)
String[] s = new String[5];
s ist kein array von strings sondern ein array von referenzvariablen die wiederum auf instanzen von string klassen zeigt.
zu b)
verstehe ich nicht ganz was du meinst. zwischen string arrays und arrays von eigenen objekten gibt es eigentlich keinen großen unterschied, auch wenn die string klasse so ihre eigenheiten hat.