Heim  >  Artikel  >  Java  >  Wie erreicht man einen Pass-by-Reference-Effekt für Grundelemente in Java?

Wie erreicht man einen Pass-by-Reference-Effekt für Grundelemente in Java?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-12 22:15:03930Durchsuche

How Do You Achieve a Pass-by-Reference Effect for Primitives in Java?

Java-Äquivalent zur Referenzübergabe für Grundelemente

In C ermöglicht die Referenzübergabe Funktionen, Variablen außerhalb ihres Gültigkeitsbereichs zu ändern. Java arbeitet jedoch mit der Wertübergabe, was es schwierig macht, den gleichen Effekt für Grundelemente zu erzielen.

Betrachten Sie den folgenden Code:

public class XYZ {
    public static void main(String[] args) {
        int toyNumber = 5;
        XYZ temp = new XYZ();
        temp.play(toyNumber);
        System.out.println("Toy number in main " + toyNumber);
    }

    void play(int toyNumber) {
        System.out.println("Toy number in play " + toyNumber);
        toyNumber++;
        System.out.println("Toy number in play after increment " + toyNumber);
    }
}

Dieser Code führt zu:

Toy number in play 5
Toy number in play after increment 6
Toy number in main 5

Im Gegensatz zu C haben Änderungen, die an toyNumber in play() vorgenommen werden, keinen Einfluss auf den Wert in main(). Dies liegt daran, dass Java primitive Werte per Kopie und nicht per Referenz übergibt.

Alternative Ansätze

1. Verwenden Sie einen Objekt-Wrapper:

Ein Ansatz besteht darin, das Grundelement in ein Objekt zu packen und das Objekt als Referenz zu übergeben:

class ToyNumber {
    int toyNumber;
}
public static void main(String[] args) {
    ToyNumber toyNumber = new ToyNumber(5);
    XYZ temp = new XYZ();
    temp.play(toyNumber);
    System.out.println("Toy number in main " + toyNumber.toyNumber);
}
void play(ToyNumber toyNumber) {
    System.out.println("Toy number in play " + toyNumber.toyNumber);
    toyNumber.toyNumber++;
    System.out.println("Toy number in play after increment " + toyNumber.toyNumber);
}

Diese Methode ermöglicht In play() vorgenommene Änderungen werden in main() widergespiegelt. Durch das Erstellen eines Objekts entsteht jedoch zusätzlicher Aufwand.

2. Geben Sie den Wert zurück:

Eine andere Option besteht darin, den geänderten Wert zurückzugeben:

int play(int toyNumber) {
    ...
    return toyNumber;
}
public static void main(String[] args) {
    int toyNumber = 5;
    toyNumber = temp.play(toyNumber);
    System.out.println("Toy number in main " + toyNumber);
}

Dieser Ansatz funktioniert, erfordert jedoch eine Änderung der Aufrufseite, um den Rückgabewert zu erhalten.

3. Statische oder Klassenvariablen:

Wenn sich play() und main() innerhalb derselben Klasse oder Klasseninstanz befinden, sollten Sie die Verwendung einer statischen oder Klassenvariablen in Betracht ziehen:

class XYZ {
    static int toyNumber = 5;
    ...
}
public static void main(String[] args) {
    XYZ.play();
    System.out.println("Toy number in main " + XYZ.toyNumber);
}
static void play() {
    ...
    XYZ.toyNumber++;
    ...
}

Diese Methode ermöglicht es beiden Funktionen, dieselbe Variable zu ändern, kann jedoch zu Parallelitätsproblemen führen und wird nicht für Multithread-Anwendungen empfohlen.

Das obige ist der detaillierte Inhalt vonWie erreicht man einen Pass-by-Reference-Effekt für Grundelemente in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn