簡體   English   中英

靜態實例變量按值傳遞

[英]static instance variable pass by value

我認為當傳遞給方法時,java中的靜態原始變量應該與非靜態的工作方式不同:

public class Main {

    private static int a;

    public static void main(String[] args) {
        modify(a);
        System.out.println(a);
    }

    static void modify(int a){ 
        a++;
    }
}

輸出為0,這對於按值傳遞的原語是可以理解的,但是為什么static在這里不表示任何含義? 我期望1作為輸出。

也許這是一個愚蠢的問題,但我很困惑。

您的modify方法中的名稱a指的是本地方法參數,而不是static變量。

在執行a++時,您的靜態方法中有一個陰影變量,它將使該方法局部變量的值增加1

靜態變量的默認值為0,不會受到影響。

如果您想更改它,請使用

Main.a++;

如果確實需要,可以通過一個int包裝器(如AtomicInteger解決此問題:

public class Main {

    private static final AtomicInteger a = new AtomicInteger(0);

    public static void main(String[] args) {
        modify(a);
        System.out.println(a);
    }

    static void modify(AtomicInteger  a){ 
        a.getAndIncrement(); // "eqvivalent" of a++
    }
}

您當前的代碼采用int格式,並且由於Java的工作原理,它接收到static a的副本,並且對您的static字段無效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM