当前位置: 代码迷 >> Java相关 >> [求助]数组问题!
  详细解决方案

[求助]数组问题!

热度:117   发布时间:2007-10-07 04:45:50.0
[求助]数组问题!
程序结果为什么是2,3,4,5,6呢?而不是1,2,3,4,5呢? 6是怎么得的呀?



// Java Document
public class ArrayTest
{
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]);
}
public static void prt(String s)
{
System.out.println(s);
}
}

----------------解决方案--------------------------------------------------------
不好意思
我没仔细看
a1的地址给了a2,a2++就是a1++,这样理解对吗?

[此贴子已经被作者于2007-10-7 5:04:00编辑过]


----------------解决方案--------------------------------------------------------
是这样的 因为数组是引用类型
----------------解决方案--------------------------------------------------------

有些问题还迷糊呢!
当创建了"int[] a1 = { 1, 2, 3, 4, 5 };",是分配在堆内存里面吗?
a2 = a1;是把堆内存里面int[] a1的首地址给了栈内存基本变量"int[] a2;"吗?


----------------解决方案--------------------------------------------------------
看起来楼主是从刚C/C++转过来的
----------------解决方案--------------------------------------------------------
回复:(Eastsun)看起来楼主是从刚C/C++转过来的

怎么讲?


----------------解决方案--------------------------------------------------------
以下是引用baby69yy2000在2007-10-7 5:45:03的发言:

有些问题还迷糊呢!
当创建了"int[] a1 = { 1, 2, 3, 4, 5 };",是分配在堆内存里面吗?
a2 = a1;是把堆内存里面int[] a1的首地址给了栈内存基本变量"int[] a2;"吗?

在java里面非值类型就是引用类型,引用类型变量里面存储的是一个真实对象的引用,而不是就是那个真实对象,确实可以理解类比于c的指针,不过理解为c++的引用更加合适!
不过非初学者就应该理解引用就是指向堆里面的一个真实对象,
例外情况对于"abc"这样的常量字符串却不是在堆中分配的


----------------解决方案--------------------------------------------------------
int[] a1 = { 1, 2, 3, 4, 5 };它分配在栈内存里面吧
----------------解决方案--------------------------------------------------------
a1和a2指向同一个数组,所以如果你改变a1,那么a2也被改变了
----------------解决方案--------------------------------------------------------
用a2=a1的形式复制只是把a1的引用地址传给了a2!改变a1就等于改变了a2了!6是由a2[4]++即(a1[4]++)得到的!
----------------解决方案--------------------------------------------------------
  相关解决方案