Посмотрите на javado c:
Если нет позиции индекса, в которой они отличаются, то более короткая строка лексикографически предшествует более длинной строке. В этом случае, CompareTo возвращает разницу длин строк, то есть значение
. Это объясняет второй пример.
В первом "0" лексикографически перед "@". Вы можете просто проверить это, запустив:
"@".compareTo("0")
, что приведет к значению 16
.
Или другим способом:
(int) '@' // 64
(int) '0' // 48
Таким образом, разница составляет 16 .
Редактировать: чтобы сравнивать электронные письма так, как вы хотите, вам нужно задействовать еще несколько логик c, например, сравнивать только часть логина (удалить домен, разделенный "@"
): str1.split("@")[0].compareTo(str2.split("@")[0])