\begin{slide}{Equals richtig implementieren}

\begin{verbatim}
class C { 
  final int x; final int y;
  C (int x, int y) { this.x = x; this.y = y; }
  int hashCode () { return this.x + 31 * this.y; }
}
\end{verbatim}
nicht so:
\begin{verbatim}  
  public boolean equals (C that) {
    return this.x == that.x && this.y == that.y;
  }
\end{verbatim}
\end{slide}

\begin{slide}{Equals richtig implementieren (II)}

\dots sondern so:
\begin{verbatim}
public boolean equals (Object o) {
  if (! (o instanceof C)) return false;
  C that = (C) o;
  return this.x == that.x && this.y == that.y;
}
\end{verbatim}
Die Methode \verb|boolean equals(Object o)| 
wird aus HashSet aufgerufen.  

Sie muß deswegen \emph{überschrieben} werden.

Das \verb|boolean equals (C that)| hat 
den  Methodenamen nur \emph{überladen}.

\end{slide}
