[Java]Frage zu dem Unterschied von zwei Ausdrücken
Moie,
ich habe grade versucht eine Informatikübung zu machen und kam nicht weiter, als ich dann in der Musterlösung nachgeschaut habe, war ich irgendwie verwirrt.
Man sollte nämlich überprüfen, ob ein String leer is.
Ich hab es wie folgt gelöst:
if(String=="") {}
und in der Musterlösung steht:
if(String.length()==0) {}
Wo genau ist da der Unterschied? Ist ein String nicht leer, wenn er "" entspricht?
Schonmal danke für die Antworten
mfg Turgon
--
„We don't make mistakes here, we just have happy accidents.“
Wenn du den Wert von Objekten vergleichen willst, dann musst du die equals Methode verwenden, also in deinem Fall 'String.equals("")'
Mit == kannst du nur die prüfen ob 2 Primitive Datentypen denselben Wert haben oder ob 2 Variablen dieselbe Instanz eines Objektes referenzieren.
Objektorientierte Sprachen sind ein bisschen anders, als Imperative Sprachen (z.B. C, Pascal, ...)
Bei Objektorientieren Sprachen arbeitest du mit Objekten. In deinem Fall ist String eine Referenz auf ein Objekt. Quasi ein Zeiger. Ein Zeiger auf ein Objekt, indem die Daten gespeichert sind und Methoden bereitstellt. Ein String ist ja kein nativer Datentyp (wie z.B. int, boolean, double, float), sondern ein zusammengesetzter Datentyp aus einzelnen Charactern. Also ein String ist eine Liste aus Zeichen.
Mit String == "" vergleichst du, ob die Referenz ein leerer String ist, aber du möchtest ja wissen, ob die Daten, die gespeichert worden sind, einen leeren String entsprechen. Also muss eine Methode vorhanden sein, die dir Informationen zurückgibt, mit denen du arbeiten kannst. Entweder benutzt String.length() == 0 und vergleichst damit, ob die Länge gleich 0 ist, oder du benutzt String.equals("") und vergleichst den leeren String mit deinem String.
String.isEmpty() gibt's btw auch, für die ganz Faulen.
Zitat von Whiz-zarD
Objektorientierte Sprachen sind ein bisschen anders, als Imperative Sprachen (z.B. C, Pascal, ...)
...
Naja, ist nicht so, dass in C str == "" besser funktionieren würde …
Zitat
Mit String == "" vergleichst du, ob die Referenz ein leerer String ist
...
Richtig: Man vergleicht, ob String die gleiche Adresse wie ein eben erstellter leerer String hat.
--
A human is a system for converting dust billions of years ago into dust billions of years from now via a roundabout process which involves checking email a lot.
OK, C war vielleicht in diesem Fall ein schlechtes Beispiel, da es unter C ein String ja ein Char-Array ist, der auch als Array behandelt werden muss.
Aber ich wollte eher mehr auf das Programmierparadigma eingehen.
Erstmal hoffe ich das die Variable nicht wirklich "String" heißt. Da dies der String Classe entspricht.
Ich nehme mal ein besseres Beispiel:
String str = "Hallo Welt";
Zitat
if(String=="") {}
...
In vielen Sprachen wäre dies korrekt. In Java allerdings nicht. Die Variable str ist nämlich nur ein Zeiger auf das im Speicher liegende String-Objekt. Deine Abfrage oben würde daher die Adresse mit einem Leer-String vergleichen.
Wenn müsstest du hier:
if (str.equals(""))
schreiben.
Zitat
if(String.length()==0) {}
...
Ist im Grunde die performatere Lösung. Ist aber ansonsten das selbe wie das mit dem Equals.
Nur das hier nicht erst ein neues leeres String Objekt gebildet werden muss .