(三)引用类型数组的初始化
2017-04-13 09:16
211 查看
之前的博客《深入数组--内存中的数组》中用图解的方式展示了普通数组在内存中是怎么存储的,本篇将以同样的方式说明引用类型数组在内存中是如何存储的。
案例:
下面我从上到下用画图的方式将内存变化进行展示:
1.Person[] students;执行这句代码的时候,表示创建一个类型为Person[]的变量students,此时系统在栈内存中分配空间,但是并为指向任何有效内存空间。
2.执行动态初始化之后,系统为数组分配默认初始值null,从下面的图中可以看出,students的两个数组元素都是null,没有指向任何有效的内存空间,此时的数组元素依然不能直接使用:
3.紧接着定义了两个Person对象,并赋值,这是系统实际上分配了4块内存,栈中2个存放p1、p2两个引用变量,堆中存放2个Person实例,此时数组元素依旧没有指向有效内存单元:
4.将p1、p2赋值给数组元素,此时这两个数组元素才会指向有效的内存单元。
从上面的图可以看出,students的第一个元素和p1指向同一个内存区,而且它们都是引用类型变量,所以用student[1]和p1访问Person实例的实例变量和方法的效果是一样的。
上面的一段代码输出结果:
案例:
class Person{ public String name;//名字 public int age;//年龄 public void info(){ System.out.println("我的名字是"+name+",今年"+age+"岁了!"); } } /** * 引用类型数组 */ public class ReferenceArrayTest { public static void main(String[] args){ Person[] students;//定义一个Person[]类型的变量student //动态初始化 students=new Person[2]; //创建Person实例,并初始化 Person p1=new Person(); p1.name="老大"; p1.age=30; Person p2=new Person(); p2.name="老二"; p2.age=20; //将两个对象变量赋值给数组元素 students[0]=p1; students[1]=p2; //下面两段代码执行的结果相同 p1.info(); students[0].info(); } }
下面我从上到下用画图的方式将内存变化进行展示:
1.Person[] students;执行这句代码的时候,表示创建一个类型为Person[]的变量students,此时系统在栈内存中分配空间,但是并为指向任何有效内存空间。
2.执行动态初始化之后,系统为数组分配默认初始值null,从下面的图中可以看出,students的两个数组元素都是null,没有指向任何有效的内存空间,此时的数组元素依然不能直接使用:
3.紧接着定义了两个Person对象,并赋值,这是系统实际上分配了4块内存,栈中2个存放p1、p2两个引用变量,堆中存放2个Person实例,此时数组元素依旧没有指向有效内存单元:
4.将p1、p2赋值给数组元素,此时这两个数组元素才会指向有效的内存单元。
从上面的图可以看出,students的第一个元素和p1指向同一个内存区,而且它们都是引用类型变量,所以用student[1]和p1访问Person实例的实例变量和方法的效果是一样的。
上面的一段代码输出结果:
相关文章推荐
- Julia: 引用与copy: 关于数组、自定义类型与初始化
- 在循环中总是显示初始化引用类型的数组
- 引用类型数组的初始化
- 引用类型数组初始化
- 【java基础】引用类型数组初始化中,setter和getter函数空指针问题
- javaSE学习15_引用类型数组的初始化
- JAVA 引用类型数组的初始化
- 四张內存变化图揭秘引用类型数组的初始化
- 四张內存变化图揭秘引用类型数组的初始化
- 1.在使用new创建数组后,此时数组还是一个引用数组。 只有再创建新的对象,并把对象赋值给数组引用,到此初始化结束2.什么是引用类型?
- 类中引用类型数据成员的初始化
- 数组与方法中 值类型/引用类型
- Java学习之旅基础知识篇:数组及引用类型内存分配
- 转载(深刻地了解到了js数组是引用类型)
- java数组定义与初始化,类型转换,instanceof的使用
- 引用类型参数的初始化及可能出现的问题
- C++字符数组(定义和初始化、赋值和引用)
- JAVA的数组 && 原始类型和引用类型以及String与int long相互转化 && String与byte[]相互转化
- js数组引用数据类型分析。
- 函数的参数里面的数组参数是引用类型的