数组用来存放相同数据类型的数据,逻辑位置与物理位置都是连续的。
数组存放在堆里。
栈和堆:
栈:方法调用的时候使用栈,局部变量存放在栈里。
堆:动态的分配内存,new出来的。引用类型存放在堆里,在栈里存放引用,也就是地址,一般用16进制来表示地址:0x...。
基本类型和引用类型的区别:
基本类型:在栈中存放的是二进制位。
引用类型:引用类型其实是地址。跟C++中的指针不同,引用屏蔽了++和--。
引用变量是访问真实对象的根本方法。
如果想访问数组因素本身,就只能通过数组引用变量来访问。实际的数组对象存在在堆(heap)中(但是数组中 的数值会存放在常量池中,其实在堆中还是存地址),如果引用该数组对象的数组引用变量是局部变量,就会被存 在栈(stack)中。
使用数组:
声明 int[] arr; 此时这个arr并不是数组,而是一个引用,还不能使用。
创建(分配空间 默认初始化) arr = new int[5]; 实质是二进制位的拷贝(对拷),返回数组的首地址。
初始化 静态初始化:只指定元素内容不指定数组长度。
动态初始化:只指定数组长度,元素动态填充。
遍历数组:
普通for循环
增强for循环,使用了也临时变量,一般不进行对数组元素的赋值。
数组内存回收:
当没有任何变量指向自己(堆内存中的数组对象)的时候,这个数组就会成为垃圾,等待垃圾回收机制回收。为了让一个垃圾回收机制回收自己,可以将数组赋值为null,这样就切断了指向数组的引用变量与实际数组之间的关系。
java 8 增强的工具类 Arrays
提供了一些静态方法可以直接操作数组
比如:String toString(type[] a):该方法将一个数组转换成一个字符串,多个元素之间以 "," 隔开。