首頁 > Java > java教程 > 主體

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

Mary-Kate Olsen
發布: 2024-11-12 22:15:03
原創
936 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板