zur vorherigen Seite   zum Inhaltsverzeichnis   zur nächsten Seite

Angenommen, dass X.compareTo(Y) == 0 ist.

Ist es dann wahr, dass X.equals(Y)?

Antwort:

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.

Konsistenz mit 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.


FRAGE 7:

(Denkfrage: ) Glaubt Ihr, dass "APPLE".compareTo("apple") Null ergibt?

zur vorherigen Seite   zum Inhaltsverzeichnis   zur nächsten Seite