[英]Is a Java class variable a reference to a class object?
我知道以前曾問過這樣的問題,但我找不到滿意的答案。 假設有一個Java類:
class Foo{
public int k;
Foo(int a){
k=a;
}
}
class My{
public static void main(String args[]){
Foo obj = new Foo(5);//1
obj=new Foo(8); //2
}
}
我想知道是否可以將obj假定為對對象的foo類型的引用。 根據我在第1行中的理解,JVM制作了一個新的foo類型的對象並將其引用傳遞給obj,但在第2行中,我們能夠使用新對象超載obj的值。
所以我的問題是,如果obj是一個引用,那么它不應該僅指向一個對象(從c ++派生此定義,引用就像常量指針一樣)。
您的理解是完全正確的。 obj現在指向第二個foo對象。 在這種情況下,任何對象都不會引用foo(5),並且JVM將對其進行垃圾回收。
obj
是對foo
類型的對象的引用,您的理解是正確的。 在第1行中,JVM創建了一個foo
類型的新實例(ojbect)(在堆中分配了新內存),並且obj
現在存儲對該內存位置的引用,假設內存位置為1001
。 所以在第一行之后
obj -> 1001
在第2行之后,JVM創建了一個相同類型foo
的新對象(即在堆中分配了完全新的內存),假設這次是2001
,是分配給新對象的內存,現在在第2行之后, obj
的引用是更新並從1001
改為2001
。
obj -> 2001
在第2行之后,在內存位置1001
中分配的對象在代碼中沒有任何引用,因此最終JVM將對該內存進行垃圾回收,這意味着,它將釋放內存以供將來分配給其他對象。
Java中的引用不同於C ++,它們不是常量指針,您可以將它們視為c ++的普通pointers
,可以在給定限制的情況下隨時更改其引用/指向的內存位置。相同類型的內存位置,即對象必須是相同類型( foo
)
Foo obj
在Java中創建一個reference variable
,該reference variable
可以保存對該類對象的引用。
new Foo();
語句實際上創建一個對象。 編寫new Foo();
次數就很多new Foo();
將創建一個新對象。
如果obj是一個引用,則不應僅指向一個對象
不,不是這樣。 一個參考變量只能指向一個對象並沒有任何限制。 它可以指向任何對象。
我會說它類似於以下內容,
int a = 10;
a = 15;
並且,正如其他用戶已經發布的那樣,可以將Java中沒有指向它的引用變量的對象收集為垃圾。
Foo obj = new Foo(5);//1
聲明+實例+初始化
obj = new foo(8);
實例化+初始化
我在“ obj = new foo(8);”之前和之后在您的程序中打印obj。 線
foo obj = new foo(5);// 1
System.out.println("Before:" + obj);
obj = new foo(8); // 2
System.out.println("After:" + obj);
輸出是
Before:com.test.foo@1db9742
After:com.test.foo@106d69c
您可以從此輸出中輕松了解到new foo(8);
語句實際上創建了一個新對象。
欲了解更多,請參閱Java文檔創建對象
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.