Java内存划分:
1.对象,引用,指针
如:Person p = new Person();
解释:所有变量名都放在栈中(类似索引),所有值都放在堆中(按索引取值)。new Person()创建了一个实例对象,将实例对象赋给变量p,p会放在栈中,而该实例对象的所有成员变量的值都放在堆中,引用变量会指向对应堆取值。
2.实例:
下面为两个测试类:
在方法区,有两个类的成员变量和方法,下面先对实例对象one说明:
内存中有堆,栈,还有方法区
开始运行,首先是main()方法开始执行
在main中首先new一个实例给了one变量,即变量存放于栈中
然后实例对象的值都放在堆中,one指向对应的堆
然后在堆中,方法只能建立索引(存储地址),即方法索引指向方法区的某一地址
然后,在main()中,对实例对象的变量值重新覆了值
即,程序修改值的时候,根据实例对象one找到原来的堆中值的地址,赋予新的值
调用方法时,方法陆续进栈,等调用完了就出栈
下面为第二个实例对象two
等到main()执行完,main()方法也会出栈,程序结束!
两个引用指向同一个实例对象的情况: