1.要知道,数组也是一种类型。Java数组不是基本类型,而是引用类型。 int是基本类型,但int[] 就是引用类型了。
2.一个数组需指定类型,只能存放一种类型的元素。 如果我们在一个泛型类里面写:
T[] t = new T[5];
这会引发编译错误(CE),因为T并不是可确定的类型。 我们应该这么写:
T[] t = (T[]) new Object[5];
这时会报黄色的Warning (起码Eclipse有),可以用@SuppressWarning(“unchecked”)修饰方法,避免编译警告,但是需要小心ClassCastException。
3.数组长度虽然可以动态确定,但是一旦定长,就不可改变。 毕竟,数组长度的获取是用其length属性获取的,这个属性是public的,但由于被final修饰,只能读不能改。 不允许这样写(CE):
int[] a = new int[5];
a.length = 1;
2.不允许这样写(CE):
int[] b = new int[3] {1, 2, 3};
4.数组变量处存的不是数组元素,而是数组的引用。 举个例子比较形象: 比如有c{1, 2, 3}和d{4, 5, 6, 7},假设数组变量内存区存数组本身,如果有c = d;语句,则c处空间是不够的。这样举例子也许不是那么合适,但是数组变量处确实存的只是引用。
5.数组长度不可变,但是由于所谓的“赋值语句”本质上只是改变了数组变量存放的引用,所以表面上“数组长度可变”,然这是错误的。
6.int[] 是一维数组,int[][] 是二维数组,那么能否从int[]出发扩展到n维数组? 答案是no,因为Java是强类型语言,int[]中引用的是int类型,所以不能再指向int[],这在js里或许可以,但Java中不行。
7.操作数组的类在java.util包里,类名是Arrays,里面有很多static方法可供使用。
8.数组也可以用foreach循环来遍历
9.由于数组是引用类型,所以不new一个对象,默认是null
10.多个相同类型、具有逻辑关系的对象(或基本类型)可以用数组存放。数组随机存取,存取O(1),很方便,而且按索引寻址,很快。但是也是因为数组的“定长”,使得它显得没有集合框架使用方便,比如ArrayList。但是对于编写数据结构,如顺序表、顺序栈等数组很方便;甚至矩阵的压缩存储也是用了一维数组,简单的二维矩阵也可以用二维数组表示…用好数组也是Java的基本能力。
11.Java封装了数组的底层实现,就好比基本类型。但还是要强调:Java数组不是基本类型!