JAVA数组地址传递问题!

来源:百度知道 编辑:UC知道 时间:2024/05/14 09:16:44
public class Train
{
public static void findmin(int a[][])
{
int b[][]={{100,50,66},{8,10},{2}};
a=b;
}
public static void main(String args[])
{
int c[][]={{12,5,6},{11,0},{11,11,11}};
findmin(c);
int i,j;
for(i=0;i<c.length;i++)
for(j=0;j<c[i].length;j++)
System.out.print(c[i][j]+" ");
}
}

不是说传递的是地址么,可是运行的时候数组c里的值不变的
然后把这一段代码
int i,j;
for(i=0;i<a.length;i++)
for(j=0;j<a[i].length;j++)
System.out.print(a[i][j]+" ");
切到findmin方法结尾,就显示得出来数组里的值变了,请教高手啊
数组传递地址,那方法里的a和主体里的c不是一样地址么,怎么存在上面这个问题呢??
我觉得问题应该是出在a=b这里
因为如果我设置一个循环,让数组a里的每个数值都乘以2,那么这样c数组就会在调用方法中随着a改变而改变
所以应该是a=b有我不了解的地方吧

在Java中,参数的传递严格意义上讲都是传值的,只不过简单很容易分清楚。而对于对象,有些复杂。

首先,在Java中是先声明一个类的变量。然后,用类生成一个类的实例,也就是在内存中的类的实例区域,最后把这个区域的指针赋给类的这个变量。注意,变量中存的是指向对象的指针。

若是按传址传参数,是要改变这个对象变量所指的内存对象区域,也就是要在方法内把新对象赋给方法外的对象变量。但是,这在Java中办不到。因为Java是把对象变量中的对象指针传入方法,并没有把变量本身的地址传入方法;在方法中,会生成新变量接受这个对象的指针。所以,在Java方法中,可以改变当前对象中的内容,却不能改变方法外边变量的值,即所指向的对象。对于传值、传址的分析就是为了在应用中少犯错误。其他是次要的。

明白没有,是传值而不是传值的地址!地址没有变,C当然不变了!

java中的参数对象传递采用引用的方式 形参a只是对实参c的引用(a指向c),findmin函数只是改变了形参a的指向,而没有改变a所引用的c。这里需要区别C/C++中的指针传递

a和c只是引用,在findmin方法里只是将a引用的地址指向了b,而main函数中的c指向的地址并没有变