数据结构--深入数组


数组是一种引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的,这篇博客将深入介绍数组在内存中的运行机制。


内存中的数组

数组引用变量只是一个引用,这个引用变量可是指向任何有效的内存,只有当该引用指向有效内存后,才可通过该数组变量来访问数组元素。

实际的数组对象被存储在堆内存中,如果引用该数组对象的数组变量是一个局部变量,那么它被存储在栈内存中。如下图所示:


如果堆内存中数组不在有任何引用变量指向自己,则这个数组将成为垃圾,该数组所占的内存将会被系统的垃圾回收机制回收。

为了让垃圾回收机制回收一个数组所占的内存空间,可以将该数组变量赋为null,也就切断了数组引用变量和实际数组之间的引用关系,实际的数组也就成了垃圾。

从内存的角度,看待一个数组,一定要把数组看成两个部分

1),一部分是数组引用,也就是在代码中定义的数组引用变量

2),一部分是实际的数组对象,这部分在堆内存里运行,通常无法直接访问,只能通过数组引用变量来访问


基本类型数组的初始化

对于基本类型数组而言,数组元素的值直接存储在对于的数组元素中,因此,初始化数组时,先为该数组分配内存空间,然后将数组元素的值存入对应数组元素中

public static void main(String[] args)
	{
		// 对应下图4.5
		int[] iArr;
		// 对应下图4.6
		iArr = new int[5];
		// 对应下图4.7
		for (int i = 0; i < iArr.length; i++)
		{
			iArr[i] = i + 10;
		}
	}




引用类型数组的初始化

引用类型数组的数组元素是引用,所以情况稍微有点复杂。每个数组元素里存储的还是引用,它指向另一块内存,这块内存里存储了有效数据

/**
 * 引用类型数组的初始化
 * 
 * @author LinkinPark
 */
public class ReferenceArray
{
	public static void main(String[] args)
	{
		// 对应下图4.8
		Person[] students;
		// 对应下图4.9
		students = new Person[2];
		// 对应下图4.10
		Person zhang = new Person(15, 185);
		Person lee = new Person(16, 161);
		// 对应下图4.11
		students[0] = zhang;
		students[1] = lee;
	}

}

class Person
{
	public int age;
	public double height;

	public Person(int age, double height)
	{
		super();
		this.age = age;
		this.height = height;
	}

}



没有多维数组

Java语言里提供了支持多维数组的语法,但是从数组底层的运行机制来看,没有多维数组

多维数组同样是一维数组,只是其数组元素也是引用,数组元素里保存的引用指向了另外一个一维数组。如下如所示:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值