# prüfen ob länge eines Arrays == 0



## donchris (16. Apr 2010)

Ich habe eine Frage bezüglich dem "richtigen Prüfen von Werten" in Java. In C würde ich zwei Werte einfach per == prüfen, doch in Java sollte man angeblich immer equals nutzten.

Nun wollte ich habe prüfen ob die länge eines Arrays z gleich 0 ist, also:

z.length().equals(0) 

Resultat:
cannot find symbol
symbol  : method length()

mfg
donchris


----------



## eRaaaa (16. Apr 2010)

Arrays haben keine Methode length(), sondern eine öffentliche Variable length !
Das von dir angesprochene equals, gilt für Objekte, length liefert aber ein primitiven Datentypen int zurück, die kann man ohne Probleme mit == vergleichen !


----------



## Gorac (16. Apr 2010)

das heißt du überprüfst die länge deines arrays mit


```
if (z.length == 0) {
...
}
```


----------



## maki (16. Apr 2010)

Nebenbei bemerkt, ein Array ändert seine größe nie.


----------



## Wortraum (16. Apr 2010)

donchris hat gesagt.:


> Ich habe eine Frage bezüglich dem "richtigen Prüfen von Werten" in Java. In C würde ich zwei Werte einfach per == prüfen, doch in Java sollte man angeblich immer equals nutzten.


Du kannst zwei Werte in Java ebenfalls mit == prüfen, aber Du mußt Dir darüber bewußt sein, was Du eigentlich prüfst! Es gibt zwei Fälle:

Überprüft man elementare Datentypen wie boolean, int oder double, dann werden die Werte miteinander vergleichen. Ein Vergleich funktioniert ganz intuitiv, 5 ist == 5.
Überprüft man abstrakte Datentypen wie String, Integer oder ArrayList, dann vergleicht man Referenzen. In einer Variable ist eine Referenz auf ein Objekt gespeichert, und diese Referenzen sind die Werte, die verglichen werden.

```
Integer int1 = new Integer(5);
Integer int2 = new Integer(5);
System.out.println(int1 == int2); /* -> false */
```
In den Variablen int1 und int2 stehen als Werte die Referenzen zu den erzeugten Objetken. Da man zwei Objekte erzeugt hat, hat man auch verschiedene Referenzen. Oder im C-Jargon: die Zeiger zeigen auf unterschiedliche Adressen.

Wie soll eine Programmiersprache auch entscheiden, wie sie ein Objekt mit einem anderen Objekt vergleichen soll? In jedem Objekt gibt es so viele unterschiedliche Variablen und Werte, manche sichtbar, andere nicht, manche initialisiert, andere nicht. Was verglichen werden soll, kann nur der Programmierer festlegen, und das geschieht in der Regel in der Methode equals().

Eine Falle gibt es beim Vergleich von direkt angegebenen Zeichenketten wie "Test", denn dabei handelt es sich immer um ein Objekt, auch wenn es nirgends explizit mit _new String()_ erzeugt wurde. Und da man Objekte hat, werden bei == immer Referenzen verglichen. Ganz gemein ist, daß das sogar gutgehen kann und so scheint, als würden die Zeichenketten, nicht die Referenzen verglichen, denn es gibt einen Objekt-Pool, aus dem String-Objekte wiederverwendet werden, was effizienter ist, als neue Objekt zu erzeugen. Der Vergleich von "Test" == "Test" kann also true zurückgeben, nicht aber etwa, weil Test gleich Test ist, sondern weil es sich um das selbe Objekte mit der selben Referenz handelt. Das kann sein, muß aber nicht!

Also: Elementare Datentypen und Referenzen mit == vergleichen; Objekte mit equals() vergleichen. Der Befehl length bei einem Feld gibt Dir den elementaren Typ int zurück, den kannst Du mit == vergleichen.


----------

