![](/img/trans.png)
[英]Pass in an instance variable to a static method — and modifies another instance variance?
[英]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.