Überprüft, ob string.Länge == 0 noch schneller als Prüfung string == ""?
Lese ich aus einem Buch über Programmierung über 7-8 Jahre her, dass die überprüfung string.length == 0
ist ein schneller Weg, um zu überprüfen, für leere Saiten. Ich Frage mich, ob diese Aussage trifft auch heute noch (oder falls es jemals überhaupt wahr), weil ich persönlich denke, dass string == ""
ist übersichtlicher und besser lesbar. Ich großteils mit high-level-Sprachen wie .NET und java.
- Es hängt von der Umsetzung.
- Welche Sprache? - Es hängt von vielen Dingen ab. Obwohl in der Regel strings speichern Ihre Länge in der Objekt-und der erste Schritt der Gleichstellung ist zu überprüfen Länge.
- In Java sollte man nicht mit == vergleichen von Zeichenfolgen; es ist nicht garantiert, um Ihnen die richtige Antwort.
- Testen Sie es und finden Sie heraus.
- in .Net, ich Neige dazu, verwenden Sie string.IsNullOrWhiteSpace() oder string.IsNullOrEmpty()
- Ich denke, dass
string.length == 0
besetzen würden weniger Speicher, da es primitive int-Vergleich statt, der einen Vergleich der Inhalte von zwei höheren Ebene der Objekte als strings. Obwohl in vielen Fällen optimiert werden konnten. - In der Regel, string-Objekt speichern Ihre Länge und daher immer und Vergleich der Ganzzahl ist sehr schnell und hat weniger Speicher zuzugreifen, als eine equals () -, wo Sie - im schlimmsten Fall - haben zu prüfen, die Länge und die Schleife über die Zeichen. Trotzdem, heute ist die equals () - Methode der string sollte auch prüfen, ob die Länge der ersten und deshalb soll es - fast - der gleichen Geschwindigkeit wie die Prüfung für die Länge.
- M. Das war eine tolle Antwort. Könntest du das nochmal posten, wie die Antwort, so kann ich es akzeptieren? Danke.
- In Java-String-seit Java 6:
public boolean isEmpty() { return value.length == 0; }
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Regel, string-Objekt speichern Ihre Länge und daher immer und Vergleich der Ganzzahl ist sehr schnell und hat weniger Speicher zuzugreifen, als eine equals () -, wo Sie - im schlimmsten Fall - haben zu prüfen, die Länge und die Schleife über die Zeichen.
Sowieso, heute ist die equals () - Methode der string sollte auch prüfen, ob die Länge der ersten und deshalb soll es - fast - der gleichen Geschwindigkeit wie die Prüfung für die Länge.
entspricht Teil in Java (http://www.docjar.com/html/api/java/lang/String.java.html):
entspricht Teil in Objective-C (http://www.opensource.apple.com/source/CF/CF-476.15/CFString.c) - NSString basiert auf CFString:
string.IsNullOrEmpty()
. Sie sagen: "heute ist die equals () - Methode sollte überprüfen Sie die Länge der ersten," aber Sie liefern keine Beweise dafür, dass dies tatsächlich der Fall ist. Schlechte Antwort!if (len1 != __CFStrLength2(str2, contents2)) return false;
) - NSString basiert auf CFString; docjar.com/html/api/java/lang/String.java.html (if (n == anotherString.count) {...}
)Der beste Weg, um zu tun, dass test in Java ist
da, die Griffe der Fall, wenn Zeichenkette null ist.
Als für die schneller ist, ich denke, die Antwort ist, dass es egal ist. Beide sind sehr schnell, und welches ist eigentlich der Schnellste, hängt von internen compiler-Implementierung.
Verwenden Sie einfach
string.isEmpty()
.(Ich lehne
"".equals(string)
denn wenn man eine null ist, dass bedeutet vermutlich ein bug, sollte das Programm Abstürzen, weil es repariert werden muss. Ich bin intolerant von null.)Müssen Sie vorsichtig sein, über die Verwendung
==
test für string-Gleichheit. Wenn die variable string ist nicht interniert, es gibt eine gute chance, dass der test schlägt fehl.Ich würde verwenden
string.length() == 0
oderstring.equals("")
. Benchmark, um zu sehen, welche schneller ist.verwenden
"".isEmpty()
zu überprüfen, ob eine leere Zeichenfolge. Funktioniert Super, und auch gibt "true" zurück auf null-Objekte.String.isEmpty()
.equals() wirft eine
NullPointerException
wenn es null ist, das kann ärgerlich.Auch, vorausgesetzt, dieser ist in der Java-API, ist es wahrscheinlich sicher davon ausgehen, dass es die Schnellste Methode.
true
für einenull
wenn dieisEmpty()
ist aufgerufen, auf diesenull
Referenz? Ich würde eher erwarten, dass einNullPointerException
in diesem Fall."".isEmpty()
. Sind Sie versucht zu sagen, dass dieser Aufruf:String nullString = null; nullString.isEmpty();
zurücktrue
?