黑马程序员技术交流社区
标题:
为什么arr2是5,200,300?
[打印本页]
作者:
三生石
时间:
2014-3-8 14:56
标题:
为什么arr2是5,200,300?
本帖最后由 三生石 于 2014-3-8 16:29 编辑
代码:
public class ArrayTest
{
public static void main(String[] args)
{
int[] arr1=new int[]{1,2,3};
int[] arr2=new int[]{100,200,300};
arr1=arr2;
arr1[0]=5;
for(int i=0;i<arr2.length;i++)
System.out.println("arr2["+i+"]="+arr2
);
}
}
运行后:
QQ图片20140308145556.jpg
(24.19 KB, 下载次数: 34)
下载附件
2014-3-8 14:56 上传
为什么?不应该是100,200,300吗?
作者:
osully
时间:
2014-3-8 15:08
arr1=arr2; // 这里已经把 arr2的地址值赋值给了arr1 ,也就是说 arr1也指向了arr2的数组.
作者:
MVP
时间:
2014-3-8 17:02
arr1=arr2; 这句执行的是把arr2的内存地址赋给arr1,这样arr1操作的就是arr2里面的值了, arr1[0]=5 修改的自然就是arr2的值了。
作者:
牛头人图腾
时间:
2014-3-8 18:04
1、int[] arr1=new int[]{1,2,3}; int[] arr2=new int[]{100,200,300};栈内存中产生两个引用型变量arr1,arr2分别指向(所谓的指向就是把数组的首地址值赋予了该变量,通过寻址就可以找到该数组)了堆内存中的两个数组int[]{1,2,3}, int[]{100,200,300}。
2、arr1=arr2;把arr2保存的地址值赋予了arr1,即arr1也指向了数组 int[]{100,200,300}。而数组int[]{1,2,3}会被垃圾回收机制回收的。
3、arr1[0]=5,把arr1指向的数组零角标对应的值置为5,由于arr2也是指向该数组的,所以输出的是5,200,300.要明确引用型变量和数组(或)对象之间的关系。
作者:
徐芾清
时间:
2014-3-8 21:20
首先"arr2["+i+"]="+arr2这句没看懂
不应该是"arr2["+i+"]="+arr2[i]吗?
注意你的这句:arr1=arr2;
也就是把数组引用类型变量arr2的值赋值给arr1
我们都知道其实存在数组引用类型变量里面的是内存的地址
把arr2的值赋值给arr1也就是把arr2所指向的地址值赋给了arr1
所以arr1[0]指向的内存地址和arr2[0]也就一样了,这时候你改变了arr1[0],也就等于改变了arr2[0]
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2