Generelle Frage zu Strings



  • Ich hör immer wieder, dass wenn man zwei Strings vergleicht also String1 == String2 nur dann TRUE heraus kommt, wenn sie auf das gleiche Objekt verweisen. Das heißt doch das im folgenden Code FALSE herauskommen müsste.

    string String1 = "hallo";
    string String2 = "hallo";
    
    if(String1 == String2)
        Console.Write("String1 und String2 verweisen auf das selbe Objekt");
    

    Nun ist es aber so, dass ich diese Meldung trotzdem erscheint. Kann mir das mal einer erklären, ick blicket da ned so ganz durch.

    Gruß

    Markus Seidl



  • In der MSDN steht:

    Equality Operator
    -----------------
    Determines whether two specified String objects have the same value.

    Da hier von "Value" und nicht von "adress" die Rede ist, kann man wohl davon ausgehen, dass nicht die Objekte verglichen werden...



  • Gut, bisher habe ich es immer so gelesen. Wahrscheinlich ne kleine Kreuzung zwischen beiden. Wenn sie auf das gleiche Object verweisen isses sowieso gleich. Wenn aber zwei Klassen die gleichen Inhalte haben (String is ja selbst auch eine Klasse, die man eigentlich nur Instanziert) das heißt, wenn man zwei neue Strings/Klassen instanziert und sie mit den gleichen Werten füttert, dann werden wahrscheinlich die Klassen bei einem Vergleich TRUE liefern.

    Ist es so richtig wie ich es jetzt gesagt habe?

    Gruß

    Markus Seidl



  • Wenn du auf Objekte verweißt, ist das wieder eine andere Sache:

    mit string=string vergeilchst du ja direkt die Werte!

    Bei Objekten, die du auf Gleichheit prüfen willst, und die nicht die gleiche Adresse haben, musst du die inhalte (werte) des jew. Objektes mit dem andreren seperat vergleichen.



  • Wie kann man bei String (der selbst ja nur ein Referenztyp ist, also auf ein Objekt verweist) mit string == string direkt die Werte vergleichen. Das heißt doch, das bei diesem Vergleich irgendwas automatisch passiert, oder?

    Wenn ich zwei Objekte vergleiche, sagen wir mal 2 FTP Objekte, und ich nun nun den Usernamen untereinander Vergleichen will, isses mir schon klar, dass ich das seperat machen muss.



  • Angren Aldaron schrieb:

    Das heißt doch, das bei diesem Vergleich irgendwas automatisch passiert, oder?

    Das mag daran liegen, dass == ein überladenener Operator ist. Und ich schätze mal, dass der einen Vergelich der String-Werte vornimmt...



  • Aye stimmt, dass heißt der "==" Operator verhält sich gegenüber Referenztyp String anders als gegenüber Wertetyp Int zum Beispiel. D.h. der Operator nimmt sich die Werte selber raus, oder?



  • So in etwa, ja.



  • Ich weiß schon, meine Beschreibung der Vorgehensweise ist nicht genau 🤡 . Aber mehr wollte ich garnicht wissen. Danke 👍

    Gruß

    Markus Seidl



  • string s1, s2;
    int r = s1.compare( s2);
    r = s1.compare( "abc");
    r = s1.compare( pos1, n1, s2, pos2, n2);
    
    /* Die letzte Form vergleicht Teilzeichenketten von s1 und s2 beginnend ab pos 
    mit der Länge n. compare liefert 0 als Rückgabewert, wenn die Zeichenketten 
    gleich sind, einen negativen Wert, wenn s1 lexikografisch vor s2 steht und einen 
    positiven Wert wenn umgekehrt. Außerdem können Strings mit den üblichen 
    Vergleichsoperatoren == != < > >= und <= verglichen werden:  */
    
    if (s1 == s2) // ...
    

Anmelden zum Antworten