Behandeln von Null-Objekten bei der Gleichheitsüberprüfung
Im vorherigen Schritt haben wir erfolgreich die equals()-Methode in unserer Person-Klasse überschrieben, um Objekte basierend auf ihren Attributen zu vergleichen. Ein entscheidender Aspekt beim Schreiben robuster equals()-Methoden ist der Umgang mit potenziellen null-Werten. Wenn Sie versuchen, eine Methode auf einem null-Objekt aufzurufen, führt dies zu einer NullPointerException, einem häufigen Fehler in Java.
Unsere überschriebene equals()-Methode in Person.java enthält bereits eine Prüfung auf null: if (obj == null || getClass() != obj.getClass()). Dies ist die Standardmethode, um den Fall zu behandeln, dass das zu vergleichende Objekt null ist.
In diesem Schritt werden wir demonstrieren, was passiert, wenn man ein Objekt mit null vergleicht, und bestätigen, dass unsere equals()-Methode diesen Fall korrekt behandelt.
-
Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project in der WebIDE befinden.
-
Öffnen Sie die Datei PersonEqualityDemo.java, die Sie im vorherigen Schritt erstellt haben.
-
Fügen Sie die folgenden Zeilen in die main-Methode nach den bestehenden Vergleichs-Anweisungen ein:
System.out.println("\nComparing with null:");
System.out.println("person1.equals(null): " + person1.equals(null));
Dieser Code fügt einfach einen Vergleich von person1 mit null hinzu.
-
Speichern Sie die Datei PersonEqualityDemo.java.
-
Öffnen Sie das Terminal. Stellen Sie sicher, dass Sie sich in ~/project befinden.
-
Kompilieren Sie die geänderte Datei PersonEqualityDemo.java:
javac PersonEqualityDemo.java
Denken Sie daran, dass Sie nur die Dateien neu kompilieren müssen, die Sie geändert haben. Da Person.java in diesem Schritt nicht geändert wurde, müssen wir nur PersonEqualityDemo.java kompilieren.
-
Führen Sie das kompilierte Programm aus:
java PersonEqualityDemo
Sie sollten jetzt die vorherige Ausgabe gefolgt von dem neuen Vergleich mit null sehen:
Comparing Person objects:
person1 == person2: false
person1.equals(person2): true
person1 == person3: false
person1.equals(person3): false
person1 == person4: true
person1.equals(person4): true
Comparing with null:
person1.equals(null): false
Die Ausgabe person1.equals(null): false bestätigt, dass unsere überschriebene equals()-Methode den Vergleich mit null korrekt behandelt und false zurückgibt, ohne eine NullPointerException zu werfen. Dies liegt daran, dass die Zeile if (obj == null || getClass() != obj.getClass()) in der equals()-Methode unserer Person-Klasse auf null prüft, bevor versucht wird, auf Attribute von obj zuzugreifen.
Der Umgang mit null ist ein kritischer Teil beim Schreiben robuster Java-Code, insbesondere bei der Behandlung von Objektvergleichen. Fügen Sie immer eine null-Prüfung am Anfang Ihrer überschriebenen equals()-Methode ein.