Java中的数组
1.数组的声明
在C语言中,除了在声明数组时直接初始化时可以不声明数组的size,例如:
int a[] = {1, 2, 3}
其他情况下,声明一个数组一定要声明数组的大小。
int a[4];
for (int i = 0; i < 4; i++){
printf("a[%d] = %d\n", i, a[i]);
}
而在Java中,声明数组:
int[] a;
int a[];
即可表示数组,此时我们只有一个数组的句柄(a),但还没对数组分配空间。同C一样,可以对数组初始化:
int[] a = {1, 2, 3};
2.java中数组的“赋值”
但在java中,一个没有初始化的数组可以被其他数组“赋值”:
public static void main(String argv[]){
int[] a = {1, 2, 3};
int[] b;
b = a;
for(int i = 0; i < a.length; i++){
System.out.println("a [" + i + "] = " + a[i]);
}
System.out.println("--------------");
for(int j = 0; j < b.length; j++){
System.out.println("b [" + j + "] = " + b[j]);
}
}
观察输出:
当我们修改数组b中信息时,数组a也会随着改变:
int[] a = {1, 2, 3};
int[] b;
b = a;
b[2] = 0;
for(int i = 0; i < a.length; i++){
System.out.println("a [" + i + "] = " + a[i]);
}
System.out.println("--------------");
for(int j = 0; j < b.length; j++){
System.out.println("b [" + j + "] = " + b[j]);
}
观察输出:
说明,a和b指向统一内存空间,b = a并不意味着编译器为b创建新的空间,并将a中的元素倒进去,而是将b指向与a所指向的内存地址。
3.java对数组检查边界
当访问超出数组范围,java会通过编译,但在运行时抛出异常:
java.lang.ArrayIndexOutOfBoundsException