Как метод compareTo() сравнивает строки?

Например, если бы я сравнил строки «Hello» и «World».

Откуда он знает, что Hello больше, чем World?

Единственное, что я могу придумать, может быть, он использует таблицу ASCII в качестве ссылки?

Спасибо за помощь!


person ekeitho    schedule 02.11.2012    source источник
comment
Вы ознакомились с String API? Держу пари, что многое можно найти там. Редактировать, да, я прав. Там все расписано, и это должно быть первым местом, где вы ищете подобные вопросы, и определенно перед тем, как задавать подобные вопросы здесь.   -  person Hovercraft Full Of Eels    schedule 03.11.2012
comment
Разве Hello не меньше, чем World?   -  person Patrick James McDougle    schedule 03.11.2012
comment
Это подробно объясняется здесь.   -  person Robert Harvey    schedule 03.11.2012
comment
"Hello" меньше, чем "World", но "hello" больше, чем "World" (верхний или нижний регистр).   -  person Sergey Kalinichenko    schedule 03.11.2012
comment
лол закрыт как локализованный, но 27 тысяч просмотров и действительно полезный   -  person Ungeheuer    schedule 12.11.2016


Ответы (2)


он сравнивает две строки лексографически. проверьте здесь в Строковый API.

Если две строки различны, то либо они имеют разные символы по некоторому индексу, который является допустимым индексом для обеих строк, либо их длины различны, либо и то, и другое. Если они имеют разные символы в одной или нескольких позициях индекса, пусть k будет наименьшим таким индексом; тогда строка, символ которой в позиции k имеет меньшее значение, определяемое с помощью оператора ‹, лексикографически предшествует другой строке.

person PermGenError    schedule 02.11.2012

Все прописные буквы предшествуют строчным, поэтому:

"Be".compareTo("ay");

вернет отрицательное значение, что означает «меньше чем».

person Mordechai    schedule 02.11.2012
comment
и что, если у меня есть более 2 строк в списке. Как происходит сравнение? Я имею в виду индекс (0,1) (1,2) - person Govinda Sakhare; 25.03.2016
comment
Код, который вы включили, возвращает -31. compareTo возвращает ненулевую разницу ASCII двух строк. - person Gaurang Tandon; 24.02.2017
comment
@GaurangTandon Спасибо. Отредактированный пост. - person Mordechai; 24.02.2017
comment
Я всегда думал, что предшествующий означает, что прописные буквы имеют более высокий приоритет, чем строчные, что делает "Be".compareTo("ay")>0 :( - person He Yifei 何一非; 01.05.2017
comment
@Arefly Да, это сбивает с толку, но если вы посмотрите на это с точки зрения меньшего, равного и большего, то легче запомнить. Вот как это описано в Javadoc. - person Mordechai; 01.05.2017