数组在编程语言中是一种常见的数据结构或者说数据类型,数组中可以存储多个数据,这些数据叫做数组元素。数组是引用类型,数组中的元素可以是任意类型的,但是一个数组中的所有元素却必须是同一类型。
通常通过数组元素的索引来访问数组元素,包括为数组中的元素赋值和取出数组中的元素。
数组初始化以后,他所占用的内存就固定下来了,也就是长度将不可变,即使把该数组中的数据全部清空,他所占的内存依旧是那么多。
定义数组有两种方式:类型 [] 数组名 或 类型 数组名 [],常用的是第一种。定义数组仅仅是定义了一个引用变量,还没有具体的内存,需要初始化,定义数组的时候不能指定数组的长度。
数组的初始化也就是为他指定长度,如果指定长度以后没有为数组中的元素赋值,那么系统会指定默认值。整数类型默认是0,浮点类型默认0.0,char类型默认\u0000,boolean类型默认false,引用类型默认的是null,null也是一个值。
数组初始化分为静态初始化和动态初始化,静态初始化指的是初始化的时候由程序员显示的为数组元素指定初始值,系统来决定长度;动态初始化指的是初始化时由程序员来指定数组的长度,系统分配初始值,静态初始化和动态初始化不要同时使用。
执行静态初始化时,为元素指定的初始值类型必须与new后的类型相同或者是它子类的实例,而new后的类型要与定义数组时的类型相同或者是定义数组时的类型的子类。
静态初始化还有一种简化的方式,即:不需要new,直接在等号后边用大括号并给元素赋值,这里给元素赋值时一样要遵循类型符合的原则。
java中通过索引来访问数组元素,索引默认从0开始,最后一个是数组长度减1。如果访问数组时指定的索引值小于0或大于数组长度减1,则编译通过但是会运行时出现下标越界异常。
数组中提供了length属性,可以通过这个属性来获得数组的长度。
除开可以根据数组的长度循环遍历数组中的每个元素以外,jdk1.5以后还提供了增强for循环来遍历数组和集合,增强for循环foreach在循环遍历的时候不需要知道数组的长度,也不需要数组索引。例如:for(元素类型 接收元素的变量名:要遍历的数组或集合名)
数组是一种引用类型的数据,数组元素和数组变量在内存中是分开存放的,数组变量只是一个引用,存放在栈中,而数组元素存放在堆中。
如果一个数组确定不再需要使用了,可以把变量赋值为null,也就切断了相关的引用,那么垃圾回收机制就会把该数组回收。
只要类型相互兼容,可以让一个数组变量指向另一个实际的数组,这个时候可能会产生数组长度可变的错觉,而实际上并不是数组长度变了,只是引用改变了而已。