静态实例变量按值传递

时间:2015-01-08 15:38:37

标签: java static parameter-passing

我认为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,这对于按值传递的基元是可以理解的,但为什么静态在这里没有任何意义?我希望1作为输出。

也许是一个愚蠢的问题,但我很困惑。

3 个答案:

答案 0 :(得分:2)

a方法中的名称modify是指本地方法参数,而不是static变量。

答案 1 :(得分:0)

您的静态方法中有一个阴影变量 当a++执行时,它会将该方法局部变量的值增加1

静态变量默认值为0且不会受到影响。

如果您想要更改它 使用

Main.a++;

答案 2 :(得分:0)

如果你真的想,你可以通过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的副本,并且对您的静态字段没有影响。