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;
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;
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.
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
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.
'===' wurde durch die eingebaute Funktion 'identic()' ersetzt. –
Danke. Ich aktualisiere die Antwort. – SoftwareCarpenter