1. Strings vergleichen

Das ist alles schön und gut. Aber Sie können sehen, dass die Zeichenfolgen s1und s2tatsächlich identisch sind, was bedeutet, dass sie denselben Text enthalten. Wie weisen Sie das Programm beim Vergleich von Zeichenfolgen an, nicht auf die Adressen von StringObjekten, sondern auf deren Inhalt zu achten?

Um uns dabei zu helfen, Stringverfügt die Java-Klasse über die equalsMethode. Der Aufruf sieht so aus:

string1.equals(string2)
Vergleich zweier Strings

Diese Methode gibt zurück true, wenn die Zeichenfolgen gleich sind und falsewenn sie nicht gleich sind.

Beispiel:

Code Notiz
String s1 = "Hello";
String s2 = "HELLO";
String s3 = s1.toUpperCase();

System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));
System.out.println(s2.equals(s3));
// Hello
// HELLO
// HELLO

false // They are different
false // They are different
true // They are the same, even though the addresses are different

Mehr Beispiele:

Code Erläuterung
"Hello".equals("HELLO")
false
String s = "Hello";
"Hello".equals(s);
true
String s = "Hel";
"Hello".equals(s + "lo");
true
String s = "H";
(s + "ello").equals(s + "ello");
true


2. String-Vergleich ohne Berücksichtigung der Groß-/Kleinschreibung

Im letzten Beispiel haben Sie gesehen, dass der Vergleich ergibt . Tatsächlich sind die Saiten nicht gleich. Aber..."Hello".equals("HELLO")false

Offensichtlich sind die Saiten nicht gleich. Ihr Inhalt besteht jedoch aus den gleichen Buchstaben und unterscheidet sich nur durch die Groß-/Kleinschreibung der Buchstaben. Gibt es eine Möglichkeit, sie zu vergleichen und die Groß-/Kleinschreibung der Buchstaben außer Acht zu lassen? Das heißt, das ergibt ?"Hello".equals("HELLO")true

Und die Antwort auf diese Frage lautet ja. In Java verfügt der StringTyp über eine weitere spezielle Methode: equalsIgnoreCase. Der Aufruf sieht so aus:

string1.equalsIgnoreCase(string2)

Der Name der Methode lässt sich in etwa mit „vergleichen, aber Groß-/Kleinschreibung ignorieren“ übersetzen . Die Buchstaben im Namen der Methode umfassen zwei vertikale Linien: Der erste ist ein Kleinbuchstabe Lund der zweite ein Großbuchstabe i. Lassen Sie sich davon nicht verwirren.

Beispiel:

Code Notiz
String s1 = "Hello";
String s2 = "HELLO";
String s3 = s1.toUpperCase();

System.out.println(s1.equalsIgnoreCase(s2));
System.out.println(s1.equalsIgnoreCase(s3));
System.out.println(s2.equalsIgnoreCase(s3));  
// Hello
// HELLO
// HELLO

true
true
true


3. Beispiel für einen String-Vergleich

Lassen Sie uns nur ein einfaches Beispiel geben: Angenommen, Sie müssen zwei Zeilen über die Tastatur eingeben und feststellen, ob sie identisch sind. So sieht der Code aus:

Scanner console = new Scanner(System.in);
String a = console.nextLine();
String b = console.nextLine();
String result = a.equals(b) ? "Same" : "Different";
System.out.println(result);

4. Eine interessante Nuance des Saitenvergleichs

Es gibt eine wichtige Nuance, die Sie beachten müssen.

Wenn der Java-Compiler in Ihrem Code (insbesondere in Ihrem Code) mehrere identische Zeichenfolgen findet, erstellt er nur ein einziges Objekt für diese, um Speicherplatz zu sparen.

String text = "This is a very important message";
String message = "This is a very important message";

Und hier ist, was der Speicher als Ergebnis enthalten wird:

String-Vergleich

Und wenn man hier vergleicht text == message, dann erhält man true. Seien Sie also nicht überrascht.

Wenn Sie aus irgendeinem Grund wirklich unterschiedliche Referenzen benötigen, können Sie Folgendes schreiben:

String text = "This is a very important message";
String message = new String ("This is a very important message");

Oder dieses:

String text = "This is a very important message";
String message = new String (text);

In beiden Fällen verweisen die Variablen textund messageauf verschiedene Objekte, die denselben Text enthalten.