home  |  suche  |  kontakt/johner  |  institut 
studierende  |  tech-docs  |  mindmailer 

Werteübergabe - by value und by reference

Primitive Datentypen werden "by value" übergeben, d.h. es werden die an eine Funktion übergebenen Daten kopiert. Es besteht dann keine Verbindung mehr zwischen den Daten beim Aufrufer und den Daten in der Funktion.

Klassen dagegen sind Referenztypen. Sie stellen dabei lediglich einen Verweis auf eine Speicherstelle dar, die Werteübergabe erfolgt somit "by reference". Zum Beispiel zeigt eine Variable der aufrufenden Klasse auf ein bestimmtes Datum, in der Funktion zeigt eine andere Variable (der Übergabeparameter als Referenztyp) auf dasselbe Datum. Methodenaufrufe an einem so übergebenen Objekt arbeiten also auf demselben Objekt, das auch außerhalb sichtbar ist

Objektidentität

Mit "==" wird auf die gleiche Speicherstelle überprüft.

.equals() führt die equals-Methode der Klasse aus. Sie testet, ob zwei Objekte denselben Inhalt haben. Falls die equals-Methode auf einer Klasse nicht implementiert ist, wird equals() auf der Klasse "Object" aufgerufen.

MeineKlasse mk1 = new MeineKlasse();

MeineKlasse mk2 = new MeineKlasse();

mk1.equals(mk2) liefert false, falls equals auf MeineKlasse nicht implementiert ist.

Bei der Implementierung einer eigenen equals-Methode folgende Punkte beachten:

  • auf NULL prüfen
  • auf korrekten Datentyp prüfen (mit instanceof)
  • (nach prüfung von instanceof=true) geeignete Attribute vergleichen
package idenditaet;

public class Parameter {
  private int number;

  public int getNumber() {
    return number;
  }

  public void setNumber(int number) {
    this.number = number;
  }

  public Parameter(int number) {
    this.number = number;
  }
  
  public boolean equals(Object param){
    if (this == param) {
      return true;
    }  
    if (null == param) {
      return false;
    }
    if (param instanceof Parameter) {
      Parameter parameter = (Parameter)param;
      if(number == parameter.getNumber()) {
        return true;
      }
    

    return false;
  }
  
  //wenn equals() überschrieben wird, muss auch hashCode() überschrieben werden 

}