代码如下:
public class Birthday {
public static int constant = 1;//静态边量 类加载放在方法区内存中
public final int constant_final = 1;//常量 类加载放在方法区内存中
private int day;
private int month;
private int year;
public Birthday(int d, int m, int y) {
day = d;
month = m;
year = y;
}
// 省略get,set方法………
public static void main(String args[]) {//main方法执行,虚拟机为其分配栈内存
int date = 9;//date局部变量,8种基础类型,引用和值都存在栈中
Birthday d1 = new Birthday(7, 7, 1970);//d1为对象引用,存在栈中,对象(new BirthDate())存在堆中,其中d,m,y为局部变量存储在栈中,
//且它们的类型为基础类型,因此它们的数据也存储在栈中。day,month,year为成员变量,它们存储在堆中
//(new BirthDate()里面)。当BirthDate构造方法执行完之后,d,m,y将从栈中消失。
d1.change(date);//date变量值不会变,date在栈中引用一直都没变
}
public void change(int i) {//change方法执行,虚拟机为其分配栈内存,把date的引用传给i变量,i局部变量,8种基础类型,引用存在栈中,此时没有值
i = 1234;//此时i是重新分配1234的引用,已经不在和date的引用相同
}
}