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数组以“引用”方式被传递的主要内容,如果未能解决你的问题,请参考以下文章

Java之路数组初始化

java笔记------数组

java 数组的初始化方式

Java中数组2

Java-数组-面向对象

java 数组 线程