Call-by-Value und Call-by-Reference

In Java unterscheidet man bei einem Methoden-Aufruf zwischen Call-by-Value und Call-by-Reference.

  • Call-by-Value:
    Bei Call-by-Value handelt es sich um einen Aufruf, bei dem ein Wert übergeben wird. Dies ist der Fall, wenn man einen primitiven Datentyp an eine Methode übergibt.

  • Call-by-Reference:
    Bei Call-by-Refernce handelt es sich um einen Aufruf, bei dem eine Referenz an eine Methode übergeben wird. Dies ist der Fall, wenn man ein Objekt an eine Methode übergibt.

Unterschiede

Übergibt man einen Wert an eine Funktion, kann der Wert von dieser Funktion nicht außerhalb geändert werden.

Ein Beispiel:

public class CallByValueExample
{
  //Dies ist die Methode die die andere Aufruft und einen Wert übergibt!
  public void ersteMethode()
  {
    //Wir deklarieren uns eine Variable und weisen ihr einen Wert zu
    int eineZahl = 5;

    //Wir rufen die Methode "zweiteMethode" auf.
    zweiteMethode(eineZahl);

    //Der Wert von "eineZahl" ändert sich nicht nach dem Aufruf der Methode, 
    //obwohl in dieser mit dem Wert gearbeitet wird!
  }

  //Diese Methode bekommt einen Wert und verändert diesen!
  public void zweiteMethode(int i)
  {
    i = i + 500;
  }
}
public class CallByReferenceExample
{
  //Dies ist die Methode die die andere Aufruft und einen Wert übergibt!
  public void ersteMethode()
  {
    //Wir deklarieren uns eine Variable und weisen ihr einen Wert zu
    List<String> eineListe = new ArrayList<String>();

    //Wir rufen die Methode "zweiteMethode" auf.
    zweiteMethode(eineListe);
  }

  //Diese Methode bekommt einen Wert und verändert diesen!
  public void zweiteMethode(List<String> eineListe)
  {
    eineList.add("Hallo");
  }
}

Nach dem Aufruf von "zweiteMethode" enthält unsere List "eineList" ein Element mit dem Wert "Hallo". Dies kommt zustande, da es sich bei "eineListe" um eine Referenz auf ein Objekt handelt. Übergibt man diese an eine Methode, erhält die Methode Zugriff auf das Objekt. Es wird KEINE Kopie des Objektes erstellt!

results matching ""

    No results matching ""