Ergebnis 1 bis 7 von 7

Thema: [Java]Frage zu dem Unterschied von zwei Ausdrücken

  1. #1

    [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

  2. #2
    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.

  3. #3
    Erstmal hoffe ich das die Variable nicht wirklich "String" heißt. Da dies der String Classe entspricht.

    Ich nehme mal ein besseres Beispiel:
    Code:
    String str = "Hallo Welt";
    Zitat 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:
    Code:
    if (str.equals(""))
    schreiben.

    Zitat 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 .

  4. #4
    Achso ok, ich glaub, ich habs verstanden. Danke!
    Zitat Zitat
    Erstmal hoffe ich das die Variable nicht wirklich "String" heißt
    Nene, ich wollte damit nur sagen, dass ich einen String an der Stelle verwende, ohne genauen Namen. So als allg. Beispiel^^

  5. #5
    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.

    edit
    bah, zu langsam :/

  6. #6
    String.isEmpty() gibt's btw auch, für die ganz Faulen.
    Zitat Zitat von Whiz-zarD Beitrag anzeigen
    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 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.

  7. #7
    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.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •