首頁 >Java >java教程 >如何在Java中實現基元的引用傳遞效果?

如何在Java中實現基元的引用傳遞效果?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-12 22:15:031008瀏覽

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

Java 相當於原語以引用傳遞

在 C 中,依引用傳遞允許函數修改其範圍以外的變數。然而,Java 是按值傳遞進行操作的,因此很難為基元實現相同的效果。

考慮以下程式碼:

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);
    }
}

此程式碼將導致:

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

與C 不同,在play() 中對toyNumber 的變更不會影響其在main() 中的值。這是因為 Java 透過複製而不是引用傳遞原始值。

替代方法

1。使用物件包裝器:

一種方法是將基元包裝在物件中並透過引用傳遞物件:

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);
}

此方法允許play () 中所做的更改將反映在main() 中。但是,它透過創建物件引入了額外的開銷。

2.回傳值:

另一個選項是傳回修改後的值:

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);
}

此方法有效,但需要更改呼叫站點以接收返回值。

3.靜態或類別變數:

如果play() 和main() 位於同一類別或類別實例中,請考慮使用靜態或類別變數:

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++;
    ...
}

此方法允許兩個函數修改相同變量,但可能會導致並發問題,不建議用於多執行緒應用程式。

以上是如何在Java中實現基元的引用傳遞效果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn