Java基础_61.数组_内存分配

Java基础_61.数组_内存分配

 Java 中内存分配

左边的int[] arr 会在内存中有一块区域, 专门用来存储.

 Java基础_61.数组_内存分配

 

 右边的new int[3]也会在内存中有一块区域, 专门用来存储.

因为 new 的动作是开辟内存空间, 所以会有一块空间产生, 这块空间可以存储三个元素.

Java基础_61.数组_内存分配

 可以通过索引0,1,2  去访问这个这三个元素.

Java基础_61.数组_内存分配

数组在初始化时, 会为存储空间添加默认值.

Java基础_61.数组_内存分配 

因为是整数, 所以默认值是0. 

 Java基础_61.数组_内存分配

 Java基础_61.数组_内存分配

 使用001 来标识这块内存空间, 001 被称为内存地址.

Java基础_61.数组_内存分配

 接下来要把右边的赋值给左边, 也就是左边的要指向右边.

Java基础_61.数组_内存分配

 

 在内存中是这样的, 就是 int[] arr 要指向001 这片内存空间.

Java基础_61.数组_内存分配

 其实就是arr 指向 001, 因为001 代表的就是这块内存空间(这三个各自组成的空间)

Java基础_61.数组_内存分配

 

之后呢, 把001 赋值给arr.

当这个动作做完之后, 第一行代码才算完成了.

Java基础_61.数组_内存分配 现在输出arr, arr 的值是001, 所以在控制台输出001, 也就是输出内存地址.

Java基础_61.数组_内存分配

arr 指向左边(栈内存)的001, 然后通过左边(栈内存)的001 找到右边(堆内存)的001.

Java基础_61.数组_内存分配

 右边(堆内存) 的 001代表的是这样一块区域.

Java基础_61.数组_内存分配 

arr[0] 中的0, 会找到索引0, 其实最终找的是 0 索引位置的值.

Java基础_61.数组_内存分配 

 这样, System.out.println(arr[0])这个输出语句最终在控制台中输出的就是数据0. 

Java基础_61.数组_内存分配

 arr[1] 同理.

Java基础_61.数组_内存分配

  arr[2] 同理.

Java基础_61.数组_内存分配 

 

栈内存 存储的是局部变量, 堆内存 存储的是 new 出来的东西, new 出来的东西也称之为实体,对象.

局部变量就是定义在方法中的变量,  比如 int[] arr  就是在main 方法中写的, 所以 arr 是局部变量.

栈内存中的变量, 使用完成, 会立即消失, 比如, arr 使用完成, 就立即消失了.

Java基础_61.数组_内存分配

 每一个new 出来的东西, 都会有一个地址值.

比如 new 出来的int[3], 有一个地址值 001.

Java基础_61.数组_内存分配

堆内存里的东西, 使用完毕, 会在垃圾回收器空闲时被回收, 也就是堆内存里的数据使用完之后, 并不会立即消失.

 Java基础_61.数组_内存分配

 

 

上一篇:剑指 Offer II 001. 整数除法


下一篇:001_创建文件