数组用来存放相同数据类型的数据,逻辑位置与物理位置都是连续的。


数组存放在堆里。

栈和堆:

栈:方法调用的时候使用栈,局部变量存放在栈里。

堆:动态的分配内存,new出来的。引用类型存放在堆里,在栈里存放引用,也就是地址,一般用16进制来表示地址:0x...。


基本类型和引用类型的区别:

基本类型:在栈中存放的是二进制位。

引用类型:引用类型其实是地址。跟C++中的指针不同,引用屏蔽了++和--。

引用变量是访问真实对象的根本方法。

                 如果想访问数组因素本身,就只能通过数组引用变量来访问。实际的数组对象存在在堆(heap)中(但是数组中                    的数值会存放在常量池中,其实在堆中还是存地址),如果引用该数组对象的数组引用变量是局部变量,就会被存                  在栈(stack)中。




使用数组:

  1. 声明  int[] arr; 此时这个arr并不是数组,而是一个引用,还不能使用。
  2. 创建(分配空间 默认初始化)  arr = new int[5]; 实质是二进制位的拷贝(对拷),返回数组的首地址。
  3. 初始化  静态初始化:只指定元素内容不指定数组长度。

                     动态初始化:只指定数组长度,元素动态填充。

遍历数组:

普通for循环

增强for循环,使用了也临时变量,一般不进行对数组元素的赋值。


数组内存回收:

当没有任何变量指向自己(堆内存中的数组对象)的时候,这个数组就会成为垃圾,等待垃圾回收机制回收。为了让一个垃圾回收机制回收自己,可以将数组赋值为null,这样就切断了指向数组的引用变量与实际数组之间的关系。


java 8 增强的工具类 Arrays

提供了一些静态方法可以直接操作数组

比如:String toString(type[] a):该方法将一个数组转换成一个字符串,多个元素之间以 "," 隔开。