一个对象,两个对象,同一个对象的内存解析

1.首先我们知道方法区放的是.calss文件 所以 Phone.calss he  Demo01PhoneOne.calss出现在方法区,

2.然后当方法要执行的时候首先需要进栈这时候main 方法进栈 声明了一个局部变量 Phone one;

3.我们,我们又知道方法堆中放的是new出来的,所以 new Phone()在堆中  他有 成员变量和成员方法(成员方法 保存的是方法区中内存的16 进制的一个地址 0x999 )而这就是整个new Phone()的内存空间,而new Phone()也有一个在堆中开辟的对象地址(0x666)

4.这时候当我们执行 one.brand="苹果"时 通过地址0x666 去访问堆中的内存将成员变量的默认值进行替换

5.当我们继续执行 call(String who) 这个方法时他有2 个步骤先根据0x666找到new Phone()在堆中开辟的空间,然后通过0x999

    去方法区找到 call(String who) 方法,然后进栈 执行完毕出栈。

1.两个对象和一个对象基本没有什么区别

2.只是要注意当又new了一个对象的时候,堆中又开辟了一个对象的空间,这时候 Phone two 这个局部变量指向的是新开辟的堆的对象空间对象地址为0x333 ,而成员方法在方法区的地址不变。

1.同一个对象和前面没什么大的区别

   只需要注意当你 Phone two=one时 one保存的是堆中的对象的地址值,也就是0x666

   而two这时候和one指向的是堆中的同一个地址值,因为执行第一个one时成员变量变为了苹果等等,这时候当two指向这个地址值时,成员变量已经不是原来的默认值 null等,而是苹果了,这时候讲苹果替换成三星。然后执行方法出栈