723 Stimmen

Wie kann ich in Java Zeichenketten vergleichen?

Ich habe die == Operator in meinem Programm, um alle meine bisherigen Zeichenketten zu vergleichen. Allerdings bin ich auf einen Fehler gestoßen und habe eine davon in .equals() und der Fehler wurde dadurch behoben.

Es == schlecht? Wann sollte sie verwendet werden und wann nicht? Worin besteht der Unterschied?

80voto

Khaled.K Punkte 5688

Funktion:

public float simpleSimilarity(String u, String v) {
    String[] a = u.split(" ");
    String[] b = v.split(" ");

    long correct = 0;
    int minLen = Math.min(a.length, b.length);

    for (int i = 0; i < minLen; i++) {
        String aa = a[i];
        String bb = b[i];
        int minWordLength = Math.min(aa.length(), bb.length());

        for (int j = 0; j < minWordLength; j++) {
            if (aa.charAt(j) == bb.charAt(j)) {
                correct++;
            }
        }
    }

    return (float) (((double) correct) / Math.max(u.length(), v.length()));
}

Test:

String a = "This is the first string.";

String b = "this is not 1st string!";

// for exact string comparison, use .equals

boolean exact = a.equals(b);

// For similarity check, there are libraries for this
// Here I'll try a simple example I wrote

float similarity = simple_similarity(a,b);

55voto

samkit shah Punkte 647

== vergleicht den Referenzwert von Objekten, während die equals() Methode, die in der java.lang.String Klasse vergleicht den Inhalt der Datei String Objekt (zu einem anderen Objekt).

52voto

fabricioflores Punkte 375

Ich denke, wenn Sie eine String definieren Sie ein Objekt. Sie müssen also Folgendes verwenden .equals() . Wenn Sie primitive Datentypen verwenden, verwenden Sie == sondern mit String (und jedes andere Objekt) müssen Sie .equals() .

50voto

Rakesh KR Punkte 6177

Wenn die equals() Methode ist in der java.lang.Object Klasse, und es wird erwartet, dass sie die Gleichwertigkeit des Zustands der Objekte prüft! Das heißt, der Inhalt der Objekte. Während die == Operator soll prüfen, ob die tatsächlichen Objektinstanzen gleich sind oder nicht.

Beispiel

Betrachten Sie zwei verschiedene Bezugsgrößen, str1 y str2 :

str1 = new String("abc");
str2 = new String("abc");

Wenn Sie die equals()

System.out.println((str1.equals(str2))?"TRUE":"FALSE");

Sie erhalten die folgende Ausgabe TRUE wenn Sie == .

System.out.println((str1==str2) ? "TRUE" : "FALSE");

Jetzt erhalten Sie die FALSE als Ausgabe, da sowohl str1 y str2 auf zwei verschiedene Objekte verweisen, obwohl beide denselben Zeichenfolgeninhalt haben. Der Grund dafür ist new String() wird jedes Mal ein neues Objekt erstellt.

46voto

sham.y Punkte 1311

Betreiber \== ist immer gedacht für Objektreferenzvergleich während die Klasse String .gleich() Methode wird überschrieben für Inhaltsvergleich :

String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2); // It prints false (reference comparison)
System.out.println(s1.equals(s2)); // It prints true (content comparison)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X