Array übergeben als Wert oder übergeben als Referenz in Java

Mohammad Irfan 12 Oktober 2023
  1. Was wird in Java als Wert übergeben?
  2. Was in Java als Referenz übergeben wird
Array übergeben als Wert oder übergeben als Referenz in Java

Dieses Tutorial stellt ein Array vor, das als Wert oder Referenz in Java übergeben wird.

Wenn wir eine Methode aufrufen, können ihre Argumente als Wert oder als Referenz übergeben werden. Bevor wir diese beiden diskutieren, lassen Sie uns zwei Begriffe verstehen:

  • callee: Dies ist die Methode, die von einer anderen Methode aufgerufen wird
  • caller: Dies ist die Methode, die eine andere Methode aufruft

Lassen Sie uns nun lernen, was Wertübergabe und Referenzübergabe bedeutet.

Was wird in Java als Wert übergeben?

Wenn wir sagen, dass die Argumente als Wert übergeben werden, wird eine Kopie des tatsächlichen Parameterwerts im Speicher erstellt.

Der Aufrufer und der Aufgerufene unterhalten zwei unabhängige Variablen mit demselben Wert. Wenn der Angerufene den Parameterwert ändert, können wir die Änderung beim Aufrufer nicht sehen.

Wichtige Punkte:

  • Angerufener hat keinen Zugriff auf das ursprüngliche Element im aufrufenden Code.
  • Eine Kopie der Daten (Parameterwerte) wird an den Angerufenen gesendet.
  • Änderungen an der übergebenen Variable wirken sich nicht auf den Endwert aus.

Was in Java als Referenz übergeben wird

Wenn wir sagen, dass die Argumente per Referenz übergeben werden (auch als Adressübergabe bezeichnet), bedeutet dies, dass die Referenz eines Arguments in der aufrufenden Funktion an den entsprechenden formalen Parameter übergeben wird.

In dieser Situation wird eine Kopie der Adresse des tatsächlichen Arguments erstellt. Der Aufrufer und der Aufgerufene verwenden dieselbe Variable für den Parameter, und daher können wir die Änderung in der Variablen des Aufrufers sehen, wenn der Aufgerufene die Parametervariable ändert.

Wichtige Punkte:

  • Callee gibt einen Verweis auf das Programmierelement im aufrufenden Code.
  • Anstelle des Wertes wird die Speicheradresse der gespeicherten Daten übergeben.
  • Alle Änderungen am Wert wirken sich auf die Originaldaten aus

Java wird als Wert übergeben

Im Gegensatz zu C++ können wir in Java Argumente nur als Werte übergeben. Aber es gibt einen Haken: Wenn Objekte als Argumente übergeben werden, wird ihre Referenz als Wert an den Aufgerufenen übergeben.

Mit anderen Worten: Obwohl Java streng als Wert übergeben wird, verhält es sich für Objekte wie eine Referenzübergabe. Lassen Sie uns einige Beispiele verwenden, um dieses Konzept besser zu verstehen.

Primitive Datentypen in Java übergeben

Im folgenden Code übergeben wir zwei Ganzzahlen als Argumente an eine Funktion und ändern dann ihre Werte.

Da Argumente in Java als Wert übergeben werden, verwaltet die Funktion eine separate Kopie der Argumente. Jede Änderung, die wir an den Argumenten vornehmen, wird nur in der Funktionskopie vorgenommen und nicht in der Kopie, die die Hauptfunktion (Aufrufer) verwaltet.

Daher erhalten wir die ursprünglichen Werte, wenn wir die Werte drucken, nachdem der Funktionsaufruf beendet ist. Sehen Sie sich den Beispielcode unten an:

public class SimpleTesting {
  static void JE_function(int n1, int n2) {
    n1 = -232;
    n2 = -90;
  }

  public static void main(String args[]) {
    int JE_numa = 6932;
    int JE_numb = 8934;
    System.out.println("Numbers before function call :" + JE_numa + " and " + JE_numb);
    JE_function(JE_numa, JE_numb);
    System.out.println("Numbers after the JE_function call :" + JE_numa + " and " + JE_numb);
  }
}

Ausgabe:

Numbers before function call:6932 and 8934
Numbers after the JE_function call:6932 and 8934

Array in Java übergeben

Bei Objekten wird die Referenz auf das Objekt als Wert als Argument übergeben.

Im folgenden Code übergeben wir ein Array als Argument, und wenn wir den Wert des Objekts (Array) drucken, wird ein Speicherort gedruckt. Dies hat damit zu tun, dass eine Objektvariable den Ort des Speichers speichert, an dem das Objekt gespeichert ist.

Sehen Sie sich den Beispielcode unten an:

public class SimpleTesting {
  static void JE_function(String[] sentence) {
    System.out.println(sentence);
  }

  public static void main(String args[]) {
    String[] sent = {"I", "Love", "Delftstack"};
    JE_function(sent);
  }
}

Ausgabe:

[Ljava.lang.String;@442d9b6e

Mit dem obigen Code versuchen wir, einen Verweis auf das als Argument übergebene Array zu übermitteln. Wenn wir also den Wert des Arrays ändern (nicht den Speicherort), wird die Änderung im Aufgerufenen widergespiegelt.

Sehen Sie sich den Beispielcode unten an:

public class SimpleTesting {
  static void JE_function(String[] sentence) {
    sentence[1] = "Visit";
  }

  public static void main(String args[]) {
    String[] sent = {"I", "Love", "Delftstack"};
    System.out.println("Sentence before calling the function");
    for (String word : sent) {
      System.out.println(word);
    }
    JE_function(sent);
    System.out.println("Sentence after calling the function");
    for (String word : sent) {
      System.out.println(word);
    }
  }
}

Ausgabe:

Sentence before calling the function
I
Love
Delftstack
Sentence after calling the function
I
Visit
Delftstack

Wie aus dem obigen Code ersichtlich, wird jede Änderung am Array im Hauptblock widergespiegelt.

Stellen Sie sich das so vor, als würden zwei Freunde an einem Projekt arbeiten. Jede Arbeit, die einer der Freunde leistet, wird sich im Gesamtprojekt widerspiegeln.

Die Funktion bezieht sich in diesem Fall auf dasselbe Array, das der Hauptblock verwendet.

Verwandter Artikel - Java Array