CodeGym /Java-Blog /Random-DE /Java-String ist gleich()
John Squirrels
Level 41
San Francisco

Java-String ist gleich()

Veröffentlicht in der Gruppe Random-DE
Der Vergleich von Objekten auf Äquivalenz ist eine der wichtigsten Programmieroperationen. Trotz aller Offensichtlichkeit in der numerischen Welt ist es jedoch nicht immer klar, wie andere Datentypen verglichen werden sollen. Die Java- Objektklasse , eine Basisklasse, definiert die Methoden equal() und CompareTo() für den Vergleich. Die String-Klasse überschreibt ihre Methode equal() . Die Java-Methode String equal() vergleicht zwei Zeichenfolgen entsprechend ihrem Inhalt. Die Signatur der String- equals()- Methode sieht folgendermaßen aus:
public boolean equals(Object anotherObject)
Die Methode String equal() vergleicht den String mit dem angegebenen Objekt. Wenn die Zeichenfolgen gleich sind, wird „true“ zurückgegeben, andernfalls „false“. Sie fragen sich vielleicht, warum Sie Strings nicht mit dem Vergleichsoperator == vergleichen ? Tatsächlich ist dies auch möglich, allerdings wird das Ergebnis etwas anders ausfallen. Tatsache ist, dass der ==- Operator Adressen im Speicher vergleicht. Wenn also s1 == s2 true zurückgibt , haben diese beiden Zeichenfolgen dieselbe Adresse im Speicher. Gleichzeitig prüft equal den Inhalt von Strings auf Gleichheit. Java String equal() - 1Nehmen wir ein Beispiel für den Vergleich zweier Zeichenfolgen.
public class StringEqualsTest {
   //program to test Java equals() method
   public static void main(String[] args) {
       String myString1 = "here is my favorite string";
       String myString2 = "here is my favorite string"; //this string is the same as the previous one, at least we think so
       String myString3 = "here is My favorite string"; //this string looks a little bit like previous two, but the first letter is big M instead of small m
       String myString4 = new String("here is my favorite string");
//here we create a String in an object manner… Why? Find out soon
       String myString5 = "equals to myString1? No, not at all..."; //here we have absolutely different string. Just for fun
    //let’s compare myString1 with myString2 using “==” operator
       System.out.println(myString1 == myString2); //true
    //let’s compare myString1 with myString4 using “==” operator
       System.out.println(myString1 == myString4); //false
//and now we are going to use equals() method to compare myString1 with myString4, myString2 and myString5
     System.out.println(myString1.equals(myString4));//true
       System.out.println(myString1.equals(myString2));//true
       System.out.println(myString1.equals(myString5)); //false

   }
}
Die Ausgabe dieses Programms ist:
wahr falsch wahr wahr falsch
Schauen wir uns genauer an, was hier vor sich geht. Wenn wir einen String erstellen, wird dieser im String-Pool abgelegt, einem speziellen Speicherbereich. Strings nehmen in jedem großen Programm einen großen Teil aller Objekte ein. Um Speicherplatz zu sparen, wurde ein String-Pool erstellt, in dem eine Zeichenfolge mit dem benötigten Text platziert wird. Später neu erstellte Links beziehen sich auf denselben Speicherbereich, es ist nicht erforderlich, jedes Mal zusätzlichen Speicher zuzuweisen. Wenn Sie eine Zeichenfolge ohne neuen Operator erstellen, also beim Schreiben
String  myStringName = "...........................................",
oder so ähnlich, das Programm prüft, ob sich im String-Pool ein String mit einem solchen Text befindet. Wenn dies der Fall ist, wird kein neuer String erstellt. Und der neue Link verweist auf dieselbe Adresse im String-Pool, wo dieser String bereits gespeichert ist. Also, als wir im Programm schrieben
String myString1 = "here is my favorite string";
String myString2 = "here is my favorite string";
Die Referenz myString1 zeigt auf genau dieselbe Stelle im Speicher wie myString2 . Der erste Befehl erstellte im String Pool einen neuen String mit dem von uns benötigten Text, und als es zum zweiten kam, verwies er einfach auf denselben Speicherbereich wie myString1 . Aber die Zeichenfolge myString4 wurde mit dem neuen Operator als Objekt erstellt . Dieser Operator weist einem Objekt beim Erstellen einen neuen Speicherbereich zu. Eine mit new erstellte Zeichenfolge
String myString1 = new String ("here is my favorite string");
String myString2 = new String ("here is my favorite string");
fällt nicht in den String-Pool, sondern wird zu einem separaten Objekt, auch wenn sein Text vollständig mit demselben String aus dem String-Pool übereinstimmt. Wenn wir außerdem Strings mit der Methode String equal() vergleichen , prüft sie nicht die Adresse, sondern den Inhalt des Strings, also die Reihenfolge der Zeichen in den Strings. Und wenn der Text in den Strings derselbe ist, spielt es keine Rolle, wie sie erstellt wurden und wo sie gespeichert sind, im String Pool oder in einem separaten Speicherbereich. Deshalb waren myString1 , myString2 und myString4 in diesem Vergleich gleich. Ist Ihnen übrigens aufgefallen, dass Sie mit der Methode String equal() Strings unter Berücksichtigung der Groß- und Kleinschreibung korrekt vergleichen können? Das heißt, wenn wir die Zeichenfolge „my string“ mit den Zeichenfolgen „My string“ und „MY STRING“ vergleichen, erhalten wir „false“.
public class StringEqualsTest {

   public static void main(String[] args) {

       String myString1 = new String ("here is my favorite string");
       String myString2 = new String ("here is My favorite string");
       String myString3 = new String("HERE IS MY FAVORITE STRING");

       System.out.println(myString1.equals(myString2)); //false because first string myString1 has small m and myString2 has big M instead
       System.out.println(myString1.equals(myString3));//false because myString1 is in lowercase while myString3 is in uppercase

   }
}
Die Ausgabe ist hier:
falsch falsch
Um Zeichenfolgen ohne Berücksichtigung der Groß- und Kleinschreibung zu vergleichen, verfügt Java über eine Methode, die equal sehr ähnlich ist :
boolean equalsIgnoreCase​(String anotherString)
Lassen Sie es uns in unserem Beispiel verwenden.
public class StringEqualsTest {

   public static void main(String[] args) {

       String myString1 = new String ("here is my favorite string");
       String myString2 = new String ("here is My favorite string");
       String myString3 = new String("HERE IS MY FAVORITE STRING");
     /* here we are going to use the brother of equals() method, equalsIgnoreCase(). It can help to check user input when case isn’t
important */
       System.out.println(myString1.equalsIgnoreCase(myString2));

       System.out.println(myString1.equalsIgnoreCase(myString3));

   }
}
Die Ausgabe lautet nun:
Wahr, wahr
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION