In JDK 8, String.equals
Geräte alsString.Equals Implementierung
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
Warum wird die Iteration zwei Operationen verwendet - Erhöhen i
und Erniedrigen n
anstatt etwas wie folgt aus:
while (i < n) {
if (v1[i] != v2[i])
return false;
i++;
}
oder
while (i-- != 0) {
if (v1[i] != v2[i])
return false;
}
mit einem Inkrement t oder dekrementieren Operation?
Ich nehme an, es ist irgendwie mit JVM Bytecode-Optimierung verwandt, aber verstehe nicht, wie.
[Verbunden] (http://Stackoverflow.com/q/12661335/1743880) – Tunaki
@Thilo Sie haben Recht. Habe diesen Punkt verpasst. – SubOptimal
Wenn dies eine Art von cleverer Optimierung ist (kann nicht sehen, wie), ist es eine, die sie entschieden haben, nicht für 'Arrays.equals' zu verwenden. 'Arrays.equals' verwendet nur die offensichtliche 'for'-Schleife. –