Jedes Mal, wenn ich mit Strings zu tun habe (fast jedes Mal), halte ich inne und frage mich, welcher Weg wirklich der schnellste ist, um auf eine leere Zeichenfolge zu prüfen. Natürlich sollte die Prüfung von string.Length == 0 am schnellsten sein, da Length eine Eigenschaft ist und es keine andere Verarbeitung als die Abfrage des Eigenschaftswertes geben sollte. Aber dann frage ich mich, warum gibt es einen String.Empty? Es sollte schneller sein, auf String.Empty zu prüfen als auf Length, sage ich mir. Nun, ich habe endlich beschlossen, es auszuprobieren. Ich habe eine kleine Windows-Konsolenanwendung programmiert, die mir sagt, wie lange es dauert, eine bestimmte Prüfung für 10 Millionen Wiederholungen durchzuführen. Ich habe 3 verschiedene Strings geprüft: einen NULL-String, einen leeren String und einen ""-String. Ich habe 5 verschiedene Methoden verwendet: String.IsNullOrEmpty(), str == null, str == null || str == String.Empty, str == null || str == "", str == null || str.length == 0. Unten sind die Ergebnisse:
String.IsNullOrEmpty()
NULL = 62 milliseconds
Empty = 46 milliseconds
"" = 46 milliseconds
str == null
NULL = 31 milliseconds
Empty = 46 milliseconds
"" = 31 milliseconds
str == null || str == String.Empty
NULL = 46 milliseconds
Empty = 62 milliseconds
"" = 359 milliseconds
str == null || str == ""
NULL = 46 milliseconds
Empty = 343 milliseconds
"" = 78 milliseconds
str == null || str.length == 0
NULL = 31 milliseconds
Empty = 63 milliseconds
"" = 62 milliseconds
Nach diesen Ergebnissen wird im Durchschnitt die Kontrolle für str == null
ist am schnellsten, führt aber nicht immer zu dem, was wir suchen. if str = String.Empty
o str = ""
ist das Ergebnis falsch. Dann haben Sie 2, die an zweiter Stelle stehen: String.IsNullOrEmpty()
y str == null || str.length == 0
. Seit String.IsNullOrEmpty()
schöner aussieht und einfacher (und schneller) zu schreiben ist, würde ich empfehlen, sie der anderen Lösung vorzuziehen.
2 Stimmen
null
hat keine Methoden, also auch nichtequals()
. WennmyString
warennull
wie würden Sie jemals eine Methode darauf aufrufen? :)1 Stimmen
Darf ich vorschlagen, dass Sie
System.out.println(myString)
unmittelbar vor dem if-Block, damit Sie sehen können, was dort steht?1 Stimmen
Woher wissen Sie, dass "es gleichzusetzen ist mit
null
"?7 Stimmen
null
die dieser Variable zugewiesen wurde, wurde umgewandelt in"null"
-- Das ist eine schreckliche Idee. Versuchen Sie, dieses Design zu ändern, wenn das möglich ist.9 Stimmen
Igitt - ich glaube nicht, dass die Prüfung, ob (!myString.equals("null")) die beste Lösung ist. Ich vermute, die meisten würden den Punkt, an dem die Zeichenkette "null" zu myString zugewiesen wurde, als Fehler betrachten.
1 Stimmen
Ich möchte nicht, dass irgendjemand verwirrt wird, wie ich es getan habe, also zur Klarstellung: wenn kein Wert einer Zeichenfolge zugewiesen wird, erhält sie nicht den Wert "null", sondern einen Wert von null (ohne Paranthese, was im Grunde bedeutet, dass nichts vorhanden ist), die Lösung, die im "hinzugefügten Abschnitt der Frage bereitgestellt wird, ist sehr spezifisch für Romans Programm.