Возвращаемое значение не имеет значения, как compareTo
контракт вернуться отрицательным, положительным или 0 (как вы уже знаете).
Однако, если на самом деле вы хотите понять, почему -31
возвращается при сравнении Dog
с cat
(или любой другой строки), то вы можете просто посмотреть на метод непосредственно в String
классе:
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;
}
Имейте в виду, что value
- массив char
, поддерживающий строку.
private final char value[];
Так как же этот метод дальше?
- Вы извлекаете минимум как длину строки в переменной
lim
.
- Вы создаете копию обоих массивов строковых символов.
- Вы производите цикл над каждым символом (проверяя, равны ли они) до достижения нижнего предела.
- Если два символа с одинаковым индексом не равны, вы возвращаете результат вычитания второго в первый.
char
можно представить как значение int
(которое принимает их значение ascii) и уже упорядочено. Таким образом, когда вычитание отрицательного числа будет возвращено, если второй символ «выше», то первый. Положительный будет возвращен, если второй символ «ниже», а затем первый. 0 будет возвращено, если оба равны.
- Если все символы были равны во время цикла для наименьшей длины строки, вы возвращаете вычитание обеих длин.
В вашем примере, первая буква обоих слов не равна, так что вы получите, чтобы сравнить D
с c
, которые соответственно представлены в виде 68
и 99
. Substract от 99 до 68, и вы получите -31.
Так, чтобы ответить на этот вопрос:
Означает ли это, что ИНТ возвращенное количество мест далеко в строки формы друг друга, если они должны были быть отсортированы в алфавитном порядке как словарь?
Нет, это на самом деле либо разница между двумя значениями ascii, не совпадающими с символом, либо разностью обеих длин.
Кроме того, как метод справляется с чувствительностью к регистру? Есть ли нижний регистр буквы сначала в строке до прописного? Есть ли диаграмма для этого?
Если вы хотите проигнорировать случай сравнения, вы можете использовать String#compareToIgnoreCase
.
Также вы можете проверить this chart на значения ascii (верхний и нижний регистр).
Вы можете прочитать источник здесь: http://www.docjar.com/html/api/java/lang/String.java.html – PeterMmm
Возвращенное значение очень хорошо задокументировано в классе 'String' –