我寫了這段代碼來清除我的疑惑,我對此有點困惑。不能改變實例變量的值
class Client{
int a=80;
public void setA(int a) {
this.a = a;
}
public int getA()
{
return a;
}
public static void add(int b)
{
b=15;
System.out.println(b);
}
public static void main(String[] args) {
int b=10;
System.out.println(b); //Output 10; that's Ok with me
add(b); //Output 15; that's Ok
System.out.println(b); // Expected output 15 but still 10
new Client().a=56;
System.out.println(new Client().a); //Expected output 56 but prints 80
new Client().setA(98);
System.out.println(new Client().a); //Expected output 98 but prints 80
System.out.println(new Client().getA()); //Expected output 98 but prints 80
}
}
輸出:
10
15
10
80
80
80
Q A.在add
的b
值被設置爲15
的方法。最初它是10
。所以b
的最終值現在應該是15
。它仍在打印爲10
。
問題B.我有一個實例變量a
用值80
初始化。我創建一個Client對象&嘗試更改該值,如代碼中所示。但a
的值每次都打印一次。 a
的值應該改變。
一種方法,使您的誤解明確:申報'了'字段'private'。 – jdphenix
不要混淆你自己,用'local'和'instance'變量,這裏變量'b'是'local'到'main',另一個變量'b'是'local'到'add'方法,它們都是不同的。而且,'Client'類的每個對象都會有不同的變量'a',你在輸出中看到的基本上是'a'的不同值,因爲變量'a'不是靜態的,因此,它不會被每個實例共享,因此每個實例都會擁有它自己的變量'a'的副本:-) –