I know that compareTo
returns a negative or positive result on how well one string correlates to the other, but then why:
public class Test {
public static void main(String[] args) {
String y = "ab2";
if(y.compareTo("ac3") == -1) {
System.out.println("Test");
}
}
}
is true and
public class Test {
public static void main(String[] args) {
String y = "ab2";
if(y.compareTo("ab3") == -1) {
System.out.println("Test");
}
}
}
is also true?
compareTo() compares two string with regard to their alphabetical order. Both of you tests have a String that is alphabetically sorted "before" the String you compare it with. In other words:
By the way, you should rather use "< 0" than "== -1" in your if statement, as the
compareTo
spec says that the function returns a negative number, not specifically "-1"The general contract of
Comparable.compareTo(o)
is to returnIn your example
"ab2".compareTo("ac3") == -1
and"ab2".compareTo("ab3") == -1
only means that"ab2"
is lower than both"ac3"
and"ab3"
. You cannot conclude anything regarding"ac3"
and"ab3"
with only these examples.This result is expected since
b
comes beforec
in the alphabet (so"ab2" < "ac3"
) and2
comes before3
(so"ab2" < "ab3"
): Java sorts Strings lexicographically.compareTo
forString
s returns -1 if the firstString
(the one for which the method is called) comes before the secondString
(the method's argument) in lexicographical order. "ab2" comes before "ab3" (since the first two characters are equal and 2 comes before 3) and also before "ac3" (since the first character is equal and b comes before c), so both comparisons return -1.