Zunächst einmal, Sie sollten nicht versuchen, den Rückgabewert von compareTo
in irgendeiner anderen Art und Weise als negativ, Null, positiven zu interpretieren. Die Größe des zurückgegebenen Wertes hat keine Bedeutung.
Das heißt, String.compareTo
in OpenJDK sieht wie folgt aus:
public int compareTo(String anotherString) {
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}
Da Strings in alphabetischer Reihenfolge die Länge der Saiten spielt keine Rolle, zu vergleichen - eine Zeichenfolge beginnend mit ich kommen, bevor eine Zeichenfolge beginnen mit S unabhängig davon, wie lange sie sind.
Im Falle von Strings vergleichen wir jedes Zeichen in der Zeichenfolge mit dem Zeichen an der gleichen Stelle in der anderen Zeichenfolge alphabetisch und um dies in Java zu tun, können wir einen einfachen Trick verwenden.
In Java können wir Arithmetik unter char
s durchführen und dazu müssen wir verstehen, wie Zeichen wirklich dargestellt werden. Sie sehen das Zeichen I aber der Computer sieht die code point73
- für S der Codepunkt ist 83
. Wenn String.compareTo
sieht, dass S und I sind nicht das gleiche Zeichen es gibt S - I
, die in Code-Point-Arithmetik 83 - 73
ist und das ist, warum Sie 10
(oder -10
erhalten, wenn Sie die Reihenfolge der Saiten wechseln.
Was ist Ihre genaue Frage? – Ward
* "Wenn Sie die Größe von Str2 oder Str3 ändern, ist die Returnnummer gleich" * Der Rückgabewert hat nichts mit der * Länge * der Zeichenkette zu tun Hinweis: Der Abstand zwischen 'I' und "S" in Unicode ist 10 Zeichen. (Code Punkt 73 vs Code Punkt 83.) Aber verlassen Sie sich nicht darauf, wie Eran darauf hinweist. –
schauen Sie sich das an. Https://docs.oracle.com/javase/9 /docs/api/java/lang/String.html#compareTo-java.lang.String- – zhh