数组是一种能够通过位置索引,快速、随机地存取其中元素的集合数据结构。

对象类型

In the Java programming language, arrays are objects (§4.3.1), are dynamically created, and may be assigned to variables of type Object (§4.3.2). All methods of class Object may be invoked on an array.

注意:数组元素(内容)本身可以是基本数据类型或对象引用类型,但是数组变量(引用)则指向数组对象。数组对象并非是从某个类实例化而来,而是由 JVM 直接创建的。因此查看数组对象类名的时侯会发现都是一些奇怪的类似于 "[I" 这样的字符。

数组对象的父类是 java.lang.Object,所以可以调用 Object 类中的所有方法如 toString()。

实现如下:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

每个数组对象对应的类,可以通过 RTTI(Run-Time Type Information)于运行时检查

char[] c = {'a', 'b', 'c'} 
int[] i = {1, 2, 3}
long[] l = {1l, 2l, 3l}
float[] i = {1f, 2f, 3f}
String[] s={"aa","bb","cc"};

System.out.println(c);
System.out.println(i);
System.out.println(l);
System.out.println(f);
System.out.println(s);

Output:

[C
[I
[J
[F
[Ljava.lang.String

数组对象可以获取长度属性(只读) length。
数组是不可变的,指的就是数组长度内的内存空间。数组元素的内容允许通过赋值形式改变,而对数组变量赋值则会指向不同数组对象。

有关内存分配:
声明数组只是分配固定的引用空间大小,由于尚未赋值不指向任何数组对象。
数组对象一定存放在堆上,数组变量则不一定。不管是基本类型变量,还是对象引用类型变量,只要是局部变量就存放在上,对象引用类型变量指向的对象则一定存放在上。

数组使用

Java 是一门强类型、静态类型语言,编译器会根据数组的声明类型防止放入错误类型。

数组初始化方式:

case 1:

int[] arr = {1, 2, 3};

case 2:

int[] arr = new int[]{1, 2, 3};

case 3:

int[] arr = new int[3];
arr[0] = 1; arr[1] = 2; arr[2] = 3;

bad case 1: 不能在给定初始值的同时给定长度

int[] arr = new int[3]{1, 2, 3};

初始值已经决定数组长度,若再给出长度限制,两者不一致 Java 将无法正常工作。

我们通过数组变量结合位置索引,即可操作数组中的元素。


includecmath
16 声望5 粉丝