Ja. Die Methode kombiniert verschiedene Schritte in einer Anweisung.
import java.util.* ; class Entry { private String name; private String number; // constructor public Entry( String n, String num ) { name = n; number = num; } // methods public String getName() { return name ; } public String getNumber() { return number ; } @Override public boolean equals( Object other ) { return getName().equals( ((Entry)other).getName() ); } @Override public String toString() { return "Name: " + getName() + "; Number: " + getNumber() ; } } public class PhoneBookTest { public static void main ( String[] args) { ArrayList<Entry> phone = new ArrayList<>(); phone.add( new Entry( "Amy", "123-4567") ); phone.add( new Entry( "Bob", "123-6780") ); phone.add( new Entry( "Hal", "789-1234") ); phone.add( new Entry( "Deb", "789-4457") ); phone.add( new Entry( "Zoe", "446-0210") ); // Look for Hal in phone. The indexOf() method uses the // equals(Object) method of each object in the list. Entry target = new Entry( "Hal", null ); int spot = phone.indexOf( target ) ; System.out.println( "indexOf returns: " + spot ) ; } }
Diese Überlegungen können verwirrend sein. Hier ist ein Programm, das zeigt wie die Teile zusammenpassen. Wir kopieren dieses Programm in unsere Entwicklungsumgebung und führen es aus:
phone
ist eine Liste von Entry
-Referenzen. Das Programm durchsucht diese Liste nach "Hal".
Dazu erstellt es einen Ziel-Entry
mit dem Namen "Hal", aber null
als Telefonnummer. Anschließend sucht die Methode indexOf()
von phone
nach einer Übereinstimmung.
Die Methode indexOf()
verwendet equals()
, um aufeinanderfolgende Objekte in der Liste mit dem Zielobjekt zu vergleichen. Da equals()
nur den Namen der beiden Einträge berücksichtigt, spielt der null
-Wert im Zielobjekt keine Rolle.
Was wird das Programm ausgeben?