2013-04-27 3 views
8

Was ist der beste Weg, um Strings in Dart zu vergleichen? Die String-Klasse enthält keine equals Methode. Wird == empfohlen?Dart String Comparator

Zum Beispiel:

String rubi = 'good'; 
String ore = 'good'; 

rubi == ore; 

Antwort

8

Ja, == ist die Art und Weise zu testen, ob zwei Strings gleich sind (enthält ausschließlich die gleiche Abfolge von Zeichen). Die letzte Zeile Ihres Codes wird als true ausgewertet.

3

Strings sind unveränderliche Objekte, dh Sie können sie erstellen, aber Sie können sie nicht ändern. Sie können natürlich eine neue Zeichenkette aus anderen Zeichenketten erstellen, aber sobald sie erstellt wurde, ist der Inhalt der Zeichenkette festgelegt.

Dies ist eine Optimierung, da zwei Strings mit den gleichen Zeichen in der gleichen Reihenfolge das gleiche Objekt sein können.

String rubi = 'good'; 
String ore = 'good'; 

print(rubi == ore); // true, contain the same characters 
print(identical(rubi, ore)); // true, are the same object in memory 
+2

'===' wurde durch die eingebaute Funktion 'identic()' ersetzt. –

+0

Danke. Ich aktualisiere die Antwort. – SoftwareCarpenter

3

Im Gegensatz zu Java ermöglicht Dart Operatoren wie == außer Kraft zu setzen. Sie können also einen eigenen Test für diesen Operator definieren, um die Gleichheit zu prüfen. Sie können auch indentical function verwenden, um zu prüfen, ob zwei Referenzen auf dasselbe Objekt lauten (das Äquivalent von == zu Objekten in Java).

Für String s ist es ein bisschen speziell. Je nachdem, wie Sie die String instanziieren können Sie verschiedene Ergebnisse mit DartVM haben:

main() { 
    final s = "test"; 

    printTests(s, "test"); 
    // displays '==' => true 'identical' => true 

    printTests(s, "$s"); 
    // displays '==' => true 'identical' => false 

    printTests(s, new String.fromCharCodes(s.codeUnits)); 
    // displays '==' => true 'identical' => false 
} 

printTests(String s1, String s2) { 
    print("'==' => ${s1 == s2} 'identical' => ${identical(s1, s2)}"); 
} 

Wie Sie identical kehrt true nur für den ersten Fall und == immer true sehen können. Aber das stimmt nicht immer. Wenn Sie diesen Code in Javascript nach einer dart2js Kompilierung, identical und == ausführen immer true.

In den meisten Fällen möchten Sie die Werte von String nicht mit ihren Referenzen vergleichen, also sollten Sie == verwenden.