Java array.length und array.size unterschied?

6 Antworten

Meines Wissens nach gibt es kein "Array.size" (oder zumindest konnte ich nichts dazu finden).

Array.length:

Im Endeffekt gibt es dir die Größe des Arrays an, indem es dir die Menge an möglichen Elementen angibt, wenn man es vereinfachen will.

Praktisch gesehen, werden Arrays bei der Deklaration eines Arrays ohne vorgegebene Werte die Elemente vorinitalisiert (s. Kommentar von ohwehohach).

Wie sieht das also aus.

Folgender Quellcode:

public static void main(String[] ARGS){

String[] t = new String[4];

System.out.println(t.length);

t[0] = "a";

t[1] = "b";

System.out.println(Array.getLength(t));

for(int i=0;i<t.length;i++){
System.out.println(t[i]);
}

}

Wenn du das mal einfach ausführst, wirste sehen, dass ausgegeben wird:

4 (Anmerkung: Größe des Arrays)
a
b
null
null

Also werden auch komplexe Datentypen in Java vorinitalisiert, allerdings mit "null"

Unterschied Datentypen: https://www.java-tutorial.org/datentypenundvariablen.html

null: http://www.andreas-schrade.de/java/2013/08/12/java-die-null-referenz-teil-I/

Wie sieht das ganze im Debugger aus:

Die Variablen bei der ersten Ausgabe:

https://prnt.sc/ghs173

Wie man sieht sind alle Elemente auf null gesetzt. Die Länge beträgt 4.

https://prnt.sc/ghs1bk

Nachdem sowohl t[0], als auch t[1] gesetzt wurden, beträgt die Länge ebenfalls 4.

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

Dort siehste auch nochmal die Standardwerte für einfache Datentypen.

Jetzt meine abschließende Frage: Meinteste vll. "size" bei den primitiven Datentypen? Das kannste z.B. mit "Integer.SIZE" aufrufen. Dort wäre das Ergebnis 32. Das wäre einfach die Größe die der Datentyp im Speicher belegt in Bit.

Die Eigenschaft size gibt es bei Listen, bei Arrays heißt sie length - sie bedeuten aber beide dasselbe, nämlich wie viele Elemente das Array/die Liste umfasst.

Length gibt die Kapazität an, also wieviele Elemente in das Array passen. Size dagegen entspricht der Anzahl der tatsächlich hinzugefügten Elemente.

Das ist nicht korrekt. Wenn ich ein int[5] habe, dann weiß niemand, wieviele Elemente tatsächlich "hinzugefügt" sind, denn alle 5 Werte sind tatsächlich vorinitialisiert und ich könnte auch das 3. Element auf 20 setzen, ohne die anderen anzutasten. Daher gibt es auch kein array.size, sondern nur array.length.

2
@ohwehohach

Hast Recht. Habe nur gerade eine positiv bewertete Antwort auf Stack Overflow gefunden, wo genau das stand. Ich dachte auch, es gibt kein size-Attribut für Arrays. Gibt es auch nicht...

0

Was möchtest Du wissen?