面向对象初学(引用数据类型内存、地址转移分析)

一、面向对象

第二周的时间,我主要学习了数组以及面向对象中的封装和继承,那么在概念上的内容我基本上都整理在了下面这张思维导图上面,我就不再一一阐述,下面我会通过一些例子讲解一下java关于存储方面的内容,这也是比较难理解的!!!

面向对象

二、数组存储

//定义一个int类型数组
int[] arr = new int[10];

//赋值操作
arr[0] = 10;
arr[5] = 20;

//取值操作
System.out.println("arr[0]:" + arr[0]);
System.out.println("arr[5]:" + arr[5]);
//输出结果
arr[0]:10
arr[5]:20

这里的内容还是比较简单的,下面我们通过一张图来展示这个数组的存储方式
数组内存分析图
通过这张图我们可以看出来数组的名字和数组的内容不是存储在一起的,数组名存储在内存的栈区中,而数组的内容存储在堆区中,然后堆区的首地址指向栈区中,我们使用的时候先查找到栈区中的数组名,然后通过首地址找到数组。

三、数组地址转移

//定义两个int类型数组
int[] arr1 = new int[10];
int[] arr2 = new int[10];

//赋值操作
arr1[5] = 100;
arr2[5] = 500;

//取值操作
System.out.println("arr1[5]:" + arr2[5]);
System.out.println("arr2[5]:" + arr2[5]);

//将arr2赋值给arr1
arr1 = arr2;
arr1[5] = 2000;

//取值
System.out.println("arr1[5]:" + arr2[5]);
System.out.println("arr2[5]:" + arr2[5]);

//输出结果
arr1[5]:500
arr2[5]:500
arr1[5]:2000
arr2[5]:2000

这里的输出结果还是很意外的,刚开始学习的同学可能不会想到两个数组的内容会一样,话不多说,我们先看一张图:
地址转移
看了这张图想必想明白了,在arr1 = arr2 的赋值操作中,arr2 直接将自己的地址赋值给了arr1,举个生活中的例子,我们两个人在各自家里分别点了一份外卖,原本两份外卖都应该送到各自家里,但是现在我有事出去了,对外卖说,把我的那份也送到你家里,这样两份外卖的最终地址都指向了你家的地址。

地址问题总结(敲重点)

在Java编程中,数组、对象、字符串作为引用数据类型,他们的存储方式大同小异,都需要使用栈区和堆区来存储,而在赋值操作过程中,给的不是一个数值,而是一个存储地址,所以在这样的赋值操作后,两个引用数据类型名实际指向一个地址,在后面的操作中也都是在对同一块存储空间进行操作,结果也完全相同。

本周主要给大家带来的内容就是引用数据类型的地址转移问题,希望我的文章能够帮助到更多人解开疑惑,感谢大家!!!

有任何问题或者文章错误欢迎大家下方留言,我会及时回复

发布了6 篇原创文章 · 获赞 13 · 访问量 209

猜你喜欢

转载自blog.csdn.net/weixin_44009147/article/details/104327086