- 概念
-
-
根据 Java Language Specification对数组的描述:
-
In the Java programming language,arrays are objects(§4.3.1) ,are dynamically creaeted,and may be assigned to variables of type Object (§4.3.2). .All method of class Object may be invoked on an array.
即数组是一个对象,它拥有Object类中的方法。
-
- 验证:
char[] ch=new char[5];
System.out.println(ch.getClass());
System.out.println(ch.getClass().getSuperclass());
/*Output
*class [C
*class java.lang.Object
*说明数组是一个类[C对象,同时基类为Object
*/
- 定义及初始化
-
- 定义
int[] a1;//定义”一个int型数组引用“,现在只是为该引用分配了足够的存储空间,但没给数组对象本身分配任何空间。
//System.out.println(a1.toString());//编译错误,原因没有初始化。在JAVA,除了类成员变量会自动初始化(数组类型初始化为0,布尔型为false,引用为null),局部变量不初始化不能直接使用,否则编译器报错。
//int[2] a2;//定义数组的时候不允许指定数组的大小,否则编译错误
-
- 初始化
int[] a1={1,2,3,4};//
初始化方法1
int[] a2=new int[4];//
初始化方法2,它的元素值为该元素类型的默认值(数字类型为0,布尔类型为false,引用类型为null)
Father[] f=new Father[5];//这是运用了初始化方法2,它的元素值均为null,即都为空引用
//f[0].a=1;//直接使用空引用,运行时产生NullPointerException异常
for(Father x:f)//需要对数组中的引用进行初始化
{
x=new Father();
}
int[] a3=a1;//
初始化方法3,复制了一个引用,注意此时a3和a1指向对一个数组对象
-
- PS:故此一般定义和初始化是一起使用
- 常用的方法和变量
-
- length:数组的长度
int[] a1={1,2,3,4};
System.out.println(a1.length);//输出数组a1的长度4
//a1[4]++;//运行时,java会检查数组下标,一旦越界,就会抛出ArrayIndexOutOfBoundsException异常。
-
- toString()和Arrays.toString():前者属于Object类的方法
//Object.toString()
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
int[] a1={1,2,3,4};
System.out.println(a1.toString());
System.out.println(Arrays.toString(a1));
/*Output:
*[I@7852e922
*[1, 2, 3, 4]
*/
-
- clone():复制数组
int[] a1={1,2,3,4};
int[] a3=a1;//这种复制方法,使得a3和a1指向同一个对象
int[] a4=a1.clone();//使用clone方法复制,a4和a1不指向同一个对象
System.out.println(a1==a3);//true
System.out.println(a1==a4);//false