java数组程序题

来源:百度知道 编辑:UC知道 时间:2024/05/16 09:02:19
public class Arrays {
public static void main(String[] args) {
int[] a1 = { 1, 2, 3, 4, 5 };
int[] a2;
a2 = a1;
for(int i = 0; i < a2.length; i++)
a2[i]++;
for(int i = 0; i < a1.length; i++)
prt("a1[" + i + "] = " + a1[i]);
}
static void prt(String s) {
System.out.println(s);
}
} ///:~
运行结果是:
a1[0] = 2
a1[1] = 3
a1[2] = 4
a1[3] = 5
a1[4] = 6
搞不懂a1不是赋值给a2了吗?但是a1没有变啊,怎么运行结果会加1呢?

数组a2在声明时并没有使用new运算符,也就是说并未在内存中为数组a2开辟空间,a2 = a1; 这句中的等号只相当于C++中的引用,是一个指向,a2指向了数组a1的空间,a1的值 变化了a2指向的值自然就跟着变,a2[i]++这句语句使a2指向的空间数据发生了变化,每个元素都自加1,但变化的实质是a1数组的元素都自加了1,因此,打印数组a1的值也就是变化后的值了.