Java中,對象的引用是指一個變量,通過該變量可以訪問對象的所有屬性和方法。對象的地址是指這個對象在內存中的位置,也就是內存中的地址。
當定義一個對象的變量時,實際上是在內存中開辟了一塊空間用于存放該變量所引用的對象。這個空間的大小取決于對象的類型和屬性。
例如,我們定義一個Person類:
public class Person { private String name; private int age; // 構造方法 public Person(String name, int age) { this.name = name; this.age = age; } // getter和setter方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
現在我們創建一個Person對象:
Person p1 = new Person("Tom", 20);
這里的p1是一個Person類型的變量,它是一個引用類型。new操作符返回一個指向Person對象的引用,然后將這個引用賦值給p1變量。
此時,內存中的情況如下:
+--------------+ | Person | |--------------| | name="Tom" | | age=20 | +--------------+ +--------------+ | p1 | |--------------| | 0x123456 | +--------------+
左邊是Person對象在內存中的結構,右邊是p1變量在內存中的結構。我們可以看到,p1變量指向的是0x123456地址,這個地址指向了具體的Person對象。
當使用p1調用對象的方法或修改對象的屬性時,實際上是通過p1變量所指向的內存地址來訪問具體的Person對象。
需要注意的是,當我們創建一個新的Person對象并將它賦值給p1變量時,原來的Person對象并沒有被銷毀,它只是失去了引用。Java的垃圾回收機制會自動識別無引用對象并將其回收。