当前位置: 首页 > >

Java int [] arr数组以“引用”方式被传递

发布时间:

最*遇到了一个有趣的问题?java方法参数的传递是不是总是按值传递(pass-by-value)?


1.看案例

class TestDemo
{

public static void main(String[] args)
{
int [] arr1=new int[]{1,3,6,2,9};
printArrays(arr1);//输出的结果:13629
reverseArray(arr1);//输出的结果:92631
printArrays(arr1);//输出的结果:13629
}

/**求逆向数组*/
public static void reverseArray(int [] arr){
int [] arr_new=new int[arr.length];
for(int i=0;i arr_new[arr.length-1-i]=arr[i];
}
arr=arr_new;//这里到底有没有改变原本arr1的引用?
printArrays(arr);
}

/**打印数组*/
public static void printArrays(int [] arr){
for(int i=0;i System.out.print(arr[i]);
}
System.out.println("");
}

}


2.案例分析

运行上面的main方法输出的结果是:

printArrays(arr1);//输出的结果:13629
reverseArray(arr1);//输出的结果:92631
printArrays(arr1);//输出的结果:13629

为什么运行main方法输出的结果不是:

printArrays(arr1);//输出的结果:13629
reverseArray(arr1);//输出的结果:92631
printArrays(arr1);//输出的结果:92631

求逆向数组那个方法传递的不是数组的引用么?:

其实在java中,方法参数的传递总是按值传递的(pass-by-value),上面的这个reverseArray方法固然也是值传递,只不过接收的参数是一个引用,而不是基本数据类型。既然是reverseArray方法是值传递,那么arr=arr_new;这行代码是不会改变arr1的引用,因为reverseArray方法是值传递嘛。reverseArray方法里接收的那个参数明明是引用呀?是,该参数的值是一个引用。

java方法参数的传递总是按值传递:

java中的方法的参数总是按值传递的,但是接收的参数可能会是一个引用,也有可能会是一个基本的数据类型。如果是一个引用,那么我们就可以拿到该引用去操作该引用指向的内存的数据。例如上面的例子:

参数接收的是一个数组引用,通过该引用可以去操作数组:arr.length 、 arr[i] 都是通过参进来的引用去操作数组。

上面的TestDemo如何修改才能实现修改arr1的引用?:

只修改reverseArray方法,该方法只要返回一个int [] 引用,并重新赋值给arr1即可改变arr1的引用。


class TestDemo
{

public static void main(String[] args)
{
int [] arr1=new int[]{1,3,6,2,9};
printArrays(arr1);//输出的结果:13629
arr1=reverseArray(arr1);//输出的结果:92631
printArrays(arr1);//输出的结果:13629
}

/**求逆向数组*/
public static int [] reverseArray(int [] arr){
int [] arr_new=new int[arr.length];
for(int i=0;i arr_new[arr.length-1-i]=arr[i];
}
arr=arr_new;//这里到底有没有改变原本arr1的引用?
printArrays(arr);
return arr;
}

/**打印数组*/
public static void printArrays(int [] arr){
for(int i=0;i System.out.print(arr[i]);
}
System.out.println("");
}

}


修改后运行上面的main方法输出的结果是:

printArrays(arr1);//输出的结果:13629
arr1=reverseArray(arr1);//输出的结果:92631
printArrays(arr1);//输出的结果:92631



友情链接: