为什么这两个java程序的输出不同

use*_*257 3 java methods

public class Test {

    public static void change(char[] a){
        a[0] = '1';
        a[1] = '2';
    }

    public static void main(String args[]){
        char[] a = new char[]{'a','b'};

        change(a);

        System.out.println(a);
    }

}
Run Code Online (Sandbox Code Playgroud)

输出是12

public class Test {

    public static void change(char[] a){
        a = new char[]{'1','2'};
    }

    public static void main(String args[]){
        char[] a = new char[]{'a','b'};

        change(a);

        System.out.println(a);
    }

}
Run Code Online (Sandbox Code Playgroud)

输出是ab.我理解我错过了一些关于java传递方法参数的方法.我理解对象的引用是按值传递的.但是,我无法将我理解的内容与这些程序的结果相协调.

Boh*_*ian 8

在版本"2"中,更改方法"不执行任何操作",因为您要为其分配一个新数组a,即本地(参数)变量 a.这对分配给amain方法中声明的变量的数组没有影响.

当change()方法完成时,新数组超出范围并且无法访问(因此专门用于垃圾收集).