Java int [] arr数组以“引用”方式被传递
Posted LiuJun2Son
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.length;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<arr.length;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.length;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<arr.length;i++)
System.out.print(arr[i]);
System.out.println("");
修改后运行上面的main方法输出的结果是:
printArrays(arr1);//输出的结果:13629 arr1=reverseArray(arr1);//输出的结果:92631 printArrays(arr1);//输出的结果:92631
以上是关于Java int [] arr数组以“引用”方式被传递的主要内容,如果未能解决你的问题,请参考以下文章