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?