JAVA数组赋值的问题

来源:百度知道 编辑:UC知道 时间:2024/05/09 18:14:08
public class TT
{
public void primitiveTestSet(int size){
size = size * 2;
}

public void objectTestSet(int [] iArraye){
iArraye [0] = 25;
}

public static void main(String []arg){
int size = 5;
TT par = new TT();

par.primitiveTestSet(size);
System.out.println("The size is " + size);

int [] iArray = new int [3];
iArray[0] = size;
par.objectTestSet(iArray);
System.out.println("The 1st iArray element is : " + iArray[0]);
}
}

为什么结果是:
The size is 5
The 1st iArray element is : 25
方法都是void啊!

第一个5没什么说的,第二个25是因为par.objectTestSet(iArray); 时,数组iarray做为一个参数传递进去,然后在函数objectTestSet中,修改了iarray的值! 数组做为参数类似于指针,指向的是数组在内存中的地址,当函数改变传入参数的值的,实际参数的值也发生改变。

输出的结果完全正确。

之所以你对输出的结果有疑问,是因为你还没有理解java里面的数据类型。在java里面有两类数据,一种是值类型,还有一种是引用类型。向一个函数传值时,都是把
你的传的那个实参的值拷贝一份给形参。

例如有这么一个函数:

//此函数的功能是求两个整数的和

int sum(int a,int b)
{
int sum;
sum=a+b;
retrun sum;
}

当在主函数里面调用这个函数时:(main函数略)

int x=10,y=20;
int z=sum(x,y);//定义变量z来存放x与y的和。

这个过程是这样的。

把x的值(这里是10),y的值(这里是20),各拷贝一份,分别传个sum函数的形式参数a和b,即此时a和b分别的到了两个值,10、20。然后在函数里面定义了一个变量sum,把a、b的值相加,赋个sum,在返回sum的值。那么在函数里面的求和过程是根本涉及不到x、y的。也就是对x、y没有任何影响。因为是把x、y的值copy一份给a和b。

这是对与值类型的。

那么在java里面还有一种数据类型,叫做引用类型。我不知道你学过c语言没有,如果是学过c语言就很容易理解。这里的引用类型和c语言里面的指针类型差不多。

如有下面的函数:

void tt(int [] aa)
{
aa[0]=10;
}

在main函数这样调用:

int [] bb=new int[]{1,2,3,4,5,6};
tt(bb)