文章最后更新时间:
前言
首先大家要明白,Java程序在运行时,需要在内存中分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
本次知识点牵扯到了堆空间和栈空间,那么什么是堆空间,什么栈空间?
- 栈空间:用于存储程序执行时的方法调用和局部变量
- 堆空间:暂且只要知道new出来的都放在堆空间里
下列图示:红色为栈空间,蓝色为堆空间
1.先来看第一段代码,定义了一个长度(length)为3的数组,因为是动态初始化,所以值默认为0
2.假如这里堆空间里的地址为001,它就会将这个地址值赋值给栈空间里的变量,所以这时变量指向的并不是数组,而是这个数组的地址值
3.当访问数组元素时,先通过地址去找到对应的内存区域,再根据索引找到对应的元素
4.控制台输出结果为
001
0
0
0
数组内存图(单个数组)
arr [0] = 100
//将100赋值给数组里的0索引arr [2] = 200
//将200赋值给数组里的2索引
最后输出结果为
100
0
200
数组内存图(多个数组)
这段代码定义了两个数组,所以它在堆空间就会开辟出两个空间用来存放数组里的值。
数组内存图(多个数组指向同一个空间)
代码解释:
int [ ] arr = new int [3]; //定义了一个长度为3的数组
arr [0] = 100; arr [1] = 200; arr [2] = 300; //将值赋值给数组中对应的索引
输入打印结果:
001
100
200
300
定义第二个数组指向第一个数组,这时它不会去堆空间里重新开辟一个空间,而是将arr的地址赋值arr2。所以就出现了同一内存地址的两个数组,当其中一个数组发生改变,另一个也会发生改变。
这时我们再去打印结果:
001
111
001
111
© 版权声明
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自星雨の博客
THE END
暂无评论内容