3 回答

TA貢獻1831條經驗 獲得超4個贊
你所說的并不完全是內存分配的工作原理。
class A{
int a = 10;
}
在上面的示例中,您創建了一個類。類中的成員僅在創建其對象后才創建并分配其值,除非將成員聲明為靜態。因此,在您發布的第二個示例中,在構造 A 類的對象“a”之后,變量“a”被賦予值 10。如果你還是不明白,那么運行這段代碼:
class A{
int a = 10;
public static void main(String args[]){
A a = new A();
A b = new A();
b.a += 10;
System.out.println(a.a);
System.out.println(b.a);
}
}
如果變量 a 在創建對象之前被賦值,那么當對象 b 修改它時,打印的變量就會改變。但如果你運行這個,輸出將是:
10
20
這意味著變量僅在對象創建后才分配。我希望這能消除您的疑慮。還有另一個提示,靜態變量不能修改。

TA貢獻1865條經驗 獲得超7個贊
當全局變量被聲明并用值初始化時......
您所顯示的不是全局變量。Java 中不存在真正的全局變量。a
是 的實例字段A
。
這將被存儲在內存地址 a 中,值為 10。
a
不是內存地址,它只是字段的名稱。您很少需要處理低級內容,例如 Java 中的內存地址。
但是當我創建A類的對象時,a會再次初始化嗎?
在創建實例之前,不會為該字段分配內存a
,除非用于存儲已編譯的類文件本身。一旦創建了一個實例,A
內存中就會有一個位置存儲與該實例的字段10
相對應的值。a
請注意,如果您創建 的第二個實例A
,則將分配另一塊內存來保存a
該實例的 。

TA貢獻1831條經驗 獲得超10個贊
Java中沒有全局變量。有類變量和對象變量。類變量由關鍵字定義static
。
在您的代碼中,該a
變量是一個對象變量,每次創建該類的新對象時都會創建(并初始化)該變量,在本例中是通過調用new A()
.
如果您創建了 A 類的另一個對象,a
則會為其創建(并初始化)另一個對象變量,這與第一個對象變量不同。
添加回答
舉報