Heim > Java > javaLernprogramm > 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
Freigeben: 2024-11-12 22:15:03
Original
1034 Leute haben es durchsucht

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);
    }
}
Nach dem Login kopieren

Dieser Code führt zu:

Toy number in play 5
Toy number in play after increment 6
Toy number in main 5
Nach dem Login kopieren

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;
}
Nach dem Login kopieren
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);
}
Nach dem Login kopieren
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);
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren
public static void main(String[] args) {
    int toyNumber = 5;
    toyNumber = temp.play(toyNumber);
    System.out.println("Toy number in main " + toyNumber);
}
Nach dem Login kopieren

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;
    ...
}
Nach dem Login kopieren
public static void main(String[] args) {
    XYZ.play();
    System.out.println("Toy number in main " + XYZ.toyNumber);
}
Nach dem Login kopieren
static void play() {
    ...
    XYZ.toyNumber++;
    ...
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage