在main中new一个对象后的内存变化
- 一个手机类Phone,在main中实例化一个对象One
- 方法区存放类信息,包括main、Phone
- 在main中
Phone one = new Phone();
,其中堆区开辟一块空间来存放new对象的内容,其地址为0x666,内容包括成员变量的值以及成员方法在方法区的首地址0x333。在栈区仅存放该对象在堆区的首地址0x666。
one.brand = "苹果"
根据0x666找到在堆区的位置,并查询到成员变量,修改内容
one.call("乔布斯")
根据0x666找到在堆区的位置,并查到成员方法在方法区的地址0x333。该方法入栈执行。之后出栈,开始执行 one.sendMessage();
对象作为方法参数
- 对象作为方法中的参数时,传递的是对象在堆区的地址
one
在栈区的地址为0x666,执行method(one)
时,传入了0x666这个地址,在方法体内,使用这个地址到堆区查找修改。
对象作为返回值
- 对象作为返回值传递的也是在堆区开辟的空间的地址
Phone two = getPhone();
getPhone方法入栈,在方法中新建了一个对象one,在堆区的地址是0x666,最后返回这个地址,赋值给two。