Angenommen, dass X.compareTo(Y) == 0
ist.
Ist es dann wahr, dass X.equals(Y)
?
Bei den meisten Klassen, die beide Methoden implementieren, ist dies der Fall. Es ist jedoch möglich, dass es nicht zutrifft, also müssen wir die Dokumentation prüfen.
equals()
Hier ist ein Programm, das einige dieser Ideen testet:
class TestCompareTo { public static void main(String[] args) { String appleA = new String("apple"); // das sind zwei String appleB = new String("apple"); // verschiedene Objekte String berry = new String("berry"); String cherry = new String("cherry"); String A, B; A = appleA; B = appleB; System.out.print( A + ".compareTo(" + B + ") returns "); if (A.compareTo(B) == 0) System.out.println("Zero"); if (A.compareTo(B) < 0) System.out.println("Negativ"); if (A.compareTo(B) > 0) System.out.println("Positiv"); System.out.println( A + ".equals(" + B + ") ist " + A.equals(B)); System.out.println(); A = appleA; B = berry; System.out.print( A + ".compareTo(" + B + ") returns "); if (A.compareTo(B) == 0) System.out.println("Null"); if (A.compareTo(B) < 0) System.out.println("Negativ"); if (A.compareTo(B) > 0) System.out.println("Positiv"); System.out.println( A + ".equals(" + B + ") ist " + A.equals(B)); System.out.println(); A = berry; B = appleA; System.out.print( A + ".compareTo(" + B + ") returns "); if (A.compareTo(B) == 0) System.out.println("Null"); if (A.compareTo(B) < 0) System.out.println("Negativ"); if (A.compareTo(B) > 0) System.out.println("Positiv"); System.out.println( A + ".equals(" + B + ") ist " + A.equals(B)); } }
Wenn wir eine Klasse definieren und ihre Methoden schreiben, sollten wir wahrscheinlich sicherstellen, dass diese Regel (und die vorherigen Regeln) eingehalten werden. Bei einigen Klassen könnte es jedoch mehrere mögliche Vorstellungen davon geben, was "gleich" bedeutet und die dann gewählte Vorstellung ist möglicherweise nicht mit compareTo()
konsistent.
Hier ist die Ausgabe des Programms. Wir kopieren das Programm in eine Datei und führen es mit ein paar weiteren Vergleichen für A und B aus.
apple.compareTo(apple) returns Zero apple.equals(apple) ist true apple.compareTo(berry) returns Negative apple.equals(berry) ist false berry.compareTo(apple) returns Positive berry.equals(apple) ist false
Wenn wir das Programm bearbeiten und einige der Strings so ändern, dass sie Großbuchstaben enthalten, gibt das Programm möglicherweise merkwürdige Ergebnisse aus.
(Denkfrage: ) Glaubt Ihr, dass "APPLE".compareTo("apple") Null ergibt?