Java程序求解释,为什么改变数组b[0]的值同时改变数组a[0]的值,在Java里数组与数组之间相互赋值怎么理解

求系统知识点讲解,C中的数组首地址和数组 与 Java中数组首地址及数组之间的赋值 的区别

第1个回答  2013-03-12
数组不属于八大基本类型的数据,是属于引用类型的数据
引用类型的数据在创建之后,变量代表的是引用,如同你的例子里面
int b[],这个b是引用,指向了内存中的数组整体
执行了b=a之后,就把int a[]定义出来的引用a给了b,从此,int b[]的引用b指向的不再是10,20...那些数组数据,而是指向的100,200,300这些数据,b和a同时指向一块内存空间,不管谁改变了内存空间里的值,都会 最终影响到内存空间的值追问

那如何让数组a的值只是复制到数组b中?像楼下说的用中间变量么?
Java中数组之间的赋值是不是和C/C++的相同?

追答

不需要,数组有克隆方法 clone(),使用数组类型接受,就能完全复制

第2个回答  2013-03-12
那是因为你给数组b又重新赋值,这是计算机内部,a和b两个引用对象指向同一个堆内存,不管通过a[0]或b[0]都指向的是同一个元素。追问

Java中数组还能代表指针么?有没有系统的知识点讲解?

追答

理论上来说:java中是没有指针的。 但是在集合中有一个和C中的指针相似的叫游标。

第3个回答  2013-03-12
你就用个临时变量啊
int[] tmp = a;
a = b;
b = tmp;追问

有什么区别?

追答

你那样
int[] a;
int[] b;
b = a; 那么现在b和a都指向同一个数组了

用一个中间变量的话
int[] tmp = a; // tmp 指向原来的a
a = b; // a 指向 b
b = tmp; // b 指向 tmp,即原来的a

追问

我不是针对这个程序,我想弄明白在Java中,数组和指针的关系它和C里边的区别和相同点,Java中没法明用指针,如何处理数组和指针之间的变换,求知识点

追答

java中是用引用
就像int[] a = {1,2,3};

是在内存中创建这个数组对象,再把这个对象的引用赋给a(和指针有相似点,但不同)
如果再写一句int[] b = a;那么这个b和a都指向{1,2,3}这个数组,现在如果通过a或者b对数组进行改变(比如a[0] = 5;),那么,就是通过这个引用去改变了数组对象,这时b[0]获得的结果也是5,因为它们是指向同一个对象的引用。 大致就这样了。

本回答被提问者采纳
相似回答