Java 中内存分配
左边的int[] arr 会在内存中有一块区域, 专门用来存储.
右边的new int[3]也会在内存中有一块区域, 专门用来存储.
因为 new 的动作是开辟内存空间, 所以会有一块空间产生, 这块空间可以存储三个元素.
可以通过索引0,1,2 去访问这个这三个元素.
数组在初始化时, 会为存储空间添加默认值.
因为是整数, 所以默认值是0.
使用001 来标识这块内存空间, 001 被称为内存地址.
接下来要把右边的赋值给左边, 也就是左边的要指向右边.
在内存中是这样的, 就是 int[] arr 要指向001 这片内存空间.
其实就是arr 指向 001, 因为001 代表的就是这块内存空间(这三个各自组成的空间)
之后呢, 把001 赋值给arr.
当这个动作做完之后, 第一行代码才算完成了.
现在输出arr, arr 的值是001, 所以在控制台输出001, 也就是输出内存地址.
arr 指向左边(栈内存)的001, 然后通过左边(栈内存)的001 找到右边(堆内存)的001.
右边(堆内存) 的 001代表的是这样一块区域.
arr[0] 中的0, 会找到索引0, 其实最终找的是 0 索引位置的值.
这样, System.out.println(arr[0])这个输出语句最终在控制台中输出的就是数据0.
arr[1] 同理.
arr[2] 同理.
栈内存 存储的是局部变量, 堆内存 存储的是 new 出来的东西, new 出来的东西也称之为实体,对象.
局部变量就是定义在方法中的变量, 比如 int[] arr 就是在main 方法中写的, 所以 arr 是局部变量.
栈内存中的变量, 使用完成, 会立即消失, 比如, arr 使用完成, 就立即消失了.
每一个new 出来的东西, 都会有一个地址值.
比如 new 出来的int[3], 有一个地址值 001.
堆内存里的东西, 使用完毕, 会在垃圾回收器空闲时被回收, 也就是堆内存里的数据使用完之后, 并不会立即消失.