我认为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作为输出。
也许是一个愚蠢的问题,但我很困惑。
答案 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
的副本,并且对您的静态字段没有影响。