输出的结果完全正确。
之所以你对输出的结果有疑问,是因为你还没有理解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);
System.out.println(bb[0]);
输出结果是10
因为数组类型是引用类型。当我们调用函数tt时,把bb数组的首地址copy一份传给函数的形式参数aa,由于aa这是候拥有数组bb的地址,所以在aa里面做的修改都回体现在bb上。它修改的是内存中bb所在的那个内存中的值。
//下面是完整的测试:
//test2.java
class test2
{
public static void main(String [] args)
{
int [] aa=new int[]{1,2,3,4,5,6};
test2.tt(aa);
System.out.println(aa[0]);
int a=20,b=30;
System.out.println(test2.sum(a,b));
System.out.println("a:"+a+" b:"+b); //检查a、b的值是否改变。
}
public static void tt(int [] aa)
{
aa[0]=10;
}
public static int sum(int x,int y)
{
int sum=x+y;
return sum;
}
}
//讲了这么多不知道你听懂了没有,还没听明白的话就到百度里搜"值类型,引用类型"吧
温馨提示:答案为网友推荐,仅供参考