// Person.java
public class Person {
public static void main(String[] args) {
Person person = new Person("張三","學生",20); // 對象變量名 person
person.display();
}
}
// TestPerson.java (同包)
public class TestPerson {
public static void main(String[] args) {
Person person = new Person("李四","程序員",22); // 同名變量 person
person.display();
}
}
「兩個 main 方法裡對象變量名都是 `person`,為什麼能創建成功?是因為存儲位置不一樣嗎?」
| 概念 | 說明 |
|---|---|
| 局部變量作用域 | 方法內部,編譯期確定槽位,運行期棧幀隔離 |
| 對象存儲位置 | 堆,`new` 時分配,垃圾回收管理 |
| 引用變量 | 棧幀局部變量表中,存儲對象堆地址 |
| 程序入口 | `java 類名` 指定運行哪個 main,單線程單入口 |
// 在 Person.main 中添加
System.out.println("Person.main person hash: " + System.identityHashCode(person));
// 在 TestPerson.main 中添加
System.out.println("TestPerson.main person hash: " + System.identityHashCode(person));
// 分別運行:
// java Person -> 輸出 hash1
// java TestPerson -> 輸出 hash2 (不同)
// 證明:兩次運行創建不同對象,變量名相同無衝突。
同名局部變量在不同方法/類中完全合法,編譯期隔離、運行期互不干擾。Java 無全局變量,所有變量皆有明確作用域。