数组内存图

1.java内存分配介绍:灰色字体的不需了解

2.对数组内存图流程分析

1.原文件翻译成字节码进入方法区待命,main被jvm自动调用进栈内存,接着执行main里的代码,变量是内存中的存储空间,因此arr开辟空间。

注意:我们写的简化静态初始化只是简化了代码书写,真正运行时还是按照完整格式运行。

有new就进堆,所以堆会开辟出空间储存数据并产生一份地址,因为我们的数组长度为3,所以开辟出三个小格子

堆里面干的活其实就是“=”右边干的活,赋值是从右往左,所以堆内存里的东西会把地址赋给arr,这样,arr就可以通过这份地址找到对应内存当中这块空间

接着走main里剩下的三句代码, "arr[0]=44" arr拿着自己的地址先找到堆内存,再找到里面的0号索引位置,把11改成44.以此类推

执行完所有代码后,弹栈。

.

3.两个数组指向相同内存图

arr1记录到的是一份地址,arr2也是记录地址,那把arr1的地址给arr2,然后用arr2修改数据,打印出来的结果是?

如图

根据前面的流程,arr1记录到地址后,arr1会把自己的地址复制一份交给arr2,然后arr2会根据地址找到空间,因此arr1和arr2找到的是同一个空间

然后arr2根据地址找到0号索引位置将11改成了100

因为arr1和arr2用的是同一个地址,找到的是同一个空间,所以arr2改完后,arr1看见的就是arr2改过的,因此打印出来的结果都是100

好比两个人牵着同一只狗,第一个人拔了狗的胡子,那第二个人看见的就是拔了胡子的狗

posted @ 2024-09-16 13:45  直実  阅读(22)  评论(0)    收藏  举报