Я пытаюсь сравнить две строки. Я использую метод compareTo, но вижу какое-то поведение, которое не понимаю.
System.out.println("5".compareTo("10") > 0);
System.out.println("13".compareTo("10") > 0);
Почему оба эти утверждения выводят true?
Я тоже озадачен, почему вы думаете, что второй пример должен быть ложным. Это справедливо как для лексикографического, так и для числового порядка.




Естественный порядок строк Java — лексикографический, а не числовой. (См. javadoc, что означает лексикографическое значение в контексте строки Java.)
В первом примере символ '5' больше, чем символ '1', поэтому "5" больше, чем "10".
Во втором примере '1' является общим для обеих строк. Итак, переходим ко вторым символам и сравниваем '3' с '0'. Первый больше, поэтому "13" больше, чем "10".
А также:
Why is
compareTo()behaving like this
Потому что спецификация говорит, что так и должно быть; см. ссылку выше. И потому что это имеет смысл.
(Вы бы не хотели, чтобы метод String::compareTo() пытался различать слова и числа и упорядочивать слова в алфавитном порядке, а числа - в числовом... и чесать свою метафорическую голову над строками, которые не являются ни тем, ни другим!)
Когда вы указываете значение в (""), оно обрабатывается как сравнение строк, и сравнение строк отличается от сравнения чисел.
попробуйте ниже, и вы будете знать.
Integer targetValue = 10;
Integer firstValue = 5;
Integer secondValue = 13;
System.out.println("5".compareTo("10") > 0);
System.out.println("13".compareTo("10") > 0);
System.out.println(firstValue.compareTo(targetValue) > 0);
System.out.println(secondValue.compareTo(targetValue) > 0);
Почему вы ожидаете ложь?