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指向对一个数组对象
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] */
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