java main 方法运用计算

  1. 程式如下
public class Employee {
    private String name;
    public Employee(String name) {
            this.name = name; 
  }
}
public static void main(String[] args) { 
  int age = 18;
    Employee emp = new Employee("Vincent");
    Employee emp2 = new Employee("David"); 
}
記憶體位址變數
10emp2
14emp
18age
記憶體位址物件
100Employee(Vincent)
110Employee(David)

請問如果執行main方法
I. age變數在記憶體中的值是多少?
II. emp變數在記憶體中的值是多少?
III. emp2變數在記憶體中的值是多少?
IV. 上面兩個記憶體區塊,那一個是heap那一個是stack?

1、根据内存地址表,age 变量位于地址 18 处,因此其值为 18。
2、根据内存地址表,emp 变量位于地址 14 处,其值为对象 Employee(Vincent) 的引用。即 emp 变量保存了指向对象 Employee(Vincent) 的内存地址。
3、根据内存地址表,emp2 变量位于地址 10 处,其值为对象 Employee(David) 的引用。即 emp2 变量保存了指向对象 Employee(David) 的内存地址。
4、
内存地址 100 和 110 这两个记忆体区块属于heap;
内存地址 10、14 和 18 这三个记忆体区块属于stack。

看这个,每一步都很清楚:

int age = 18;
这个在stack上
emp emp2的引用在stack上,指向的对象在heap上
private String name;
这个在heap上
age是10
emp、emp2是指向对象的地址,这个无从得知,对程序员透明

每一次new对象,地址值都不一样