Übergabe durch Referenz in Java

Aryan Tyagi 12 Oktober 2023
Übergabe durch Referenz in Java

Ein Zeiger ist eine Variable in der Programmiersprachenarchitektur, die implizit die Adresse bestimmter Daten überwacht. Ein Äquivalent für eine andere Variable wird als Referenz bezeichnet. Alle Änderungen an der Referenzgröße wirken sich direkt auf das Original aus.

Java ist eine Pass-by-Value-Sprache. Es gibt so selbst in seinen Spezifikationen an, dass es nie eine Pass-by-Referenz-Sprache war. In Java gibt es aufgrund der Mehrdeutigkeit der Referenzen viel Verwirrung zwischen den beiden Begriffen. Wir werden versuchen, es in diesem Artikel zu klären.

Lassen Sie uns den Wertvorlauf besprechen. Hier wird der Wert eines Formalparameters an einen Ort kopiert, an dem er während der Methoden-/Funktionsausführung gespeichert wird. Diesem Speicherort ist normalerweise ein Speicherblock für diesen Zweck zugewiesen.

Bei der Referenzübergabe wird der Wert eines Formalparameters an einen Ort kopiert, an dem er während der Methoden-/Funktionsausführung gespeichert wird. Diesem Speicherort ist normalerweise ein Speicherblock für diesen Zweck zugewiesen.

Java wird als robuste und sichere Sprache beworben, und einer der Vorteile von Java besteht darin, dass es keine Zeiger wie C++ ermöglicht. Sie wählten sogar einen anderen Begriff für den Begriff und bezeichneten sie offiziell als Referenzen.

Der Schlüssel, um dies zu begreifen, ist, so etwas in Betracht zu ziehen wie

Object Obj;

Es ist ein Zeiger auf das Object, kein Obj. Der Begriff Referenz wird in Java missverstanden und ist die Quelle der meisten Verwirrung. In anderen Programmiersprachen funktionieren sogenannte Referenzen als Zeiger.

Wenn wir in Java über Objekte sprechen, sprechen wir von Objekt-Handles, die als Referenzen bezeichnet werden und auch von Werten bereitgestellt werden.

Im obigen Code senden Sie effektiv die konstruierte Object-Adresse an die Methode.

Java ähnelt C darin, dass es eine prozedurale Sprache ist. Sie können einer Methode einen Zeiger zuweisen, ihn dorthin senden, ihn innerhalb der Methode verfolgen und die Daten ändern, auf die er verweist. Alle Änderungen, die Sie an der Position des Zeigers vornehmen, bleiben dagegen vom Anrufer unbemerkt. (In einer Pass-by-Reference-Sprache kann die Methodenfunktion den Zeiger ändern, ohne dass der Aufrufer es merkt.)

Betrachten Sie Referenzparameter als Ersatz für übergebene Variablen. Die übergebene Variable wird zugewiesen, wenn dieser Alias ​​zugewiesen wird.

Lassen Sie uns dies anhand von zwei Situationen besser verstehen.

Wenn wir das Objekt selbst ändern und es auf einen anderen Ort oder ein anderes Objekt zeigen, werden die Änderungen nicht reflektiert. Die Änderungen werden nicht in der Funktion main() widergespiegelt, wenn wir die Referenz an einer anderen Stelle angegeben haben.

Siehe den Code unten.

class Object {
  int x;
  Object(int z) {
    x = z;
  }
  Object() {
    x = 0;
  }
}

class Main {
  public static void main(String[] args) {
    // a reference
    Object O = new Object(7);

    // Reference passed and copy created in change()
    change(O);

    // old value
    System.out.println(O.x);
  }
  public static void change(Object O) {
    // reference changed to some other location any changes not reflected
    O = new Object();

    O.x = 8;
  }
}

Ausgabe:

7

Angenommen, wir weisen einem neuen Ort oder Objekt keine Referenz zu. In diesem Fall werden die Ergebnisse zurückgespiegelt: Sie können Änderungen an den Mitgliedern vornehmen. Diese Änderungen werden widergespiegelt, wenn wir die Referenz nicht ändern, um auf ein anderes Objekt (oder einen anderen Speicherort) zu verweisen.

Zum Beispiel,

class Object {
  int x;
  Object(int z) {
    x = z;
  }
  Object() {
    x = 0;
  }
}

class Main {
  public static void main(String[] args) {
    // a reference
    Object O = new Object(7);

    // Reference passed and copy created in change()
    change(O);

    // old value
    System.out.println(O.x);
  }
  public static void change(Object O) {
    O.x = 8;
  }
}

Ausgabe:

8