这是如何运作的? - Java代码

时间:2015-06-25 15:00:32

标签: java

所以我有这段代码,

package test1;
class Student13
{
    public static void main(String [] args) 
    {
        Student13 p = new Student13();
        p.start();
    }

    void start() 
    {
        long [] a1 = {3,4,5};
        long [] a2 = fix(a1);
        System.out.print(a1[0] + a1[1] + a1[2] + " ");
        System.out.println(a2[0] + a2[1] + a2[2]);
    }

    long [] fix(long [] a3) 
    {
        a3[1] = 7;
        return a3;
    } 
}

你能告诉我为什么它会返回15 15而不是12 15吗?功能fix仅适用于long[] a2,那么最终结果是15 15怎么样?

3 个答案:

答案 0 :(得分:1)

您将a1数组传递给fix(),在a3方法中称为fix(),但无论如何仍然引用a1。因此,当您更新a3a3[1]=7时,实际上会更新fix()的参数值a1。因此,您更新了a1

答案 1 :(得分:1)

在第

long a1[] = { ... };

您正在创建一个数组对象。这将是该计划其余部分中唯一的一个。

现在打电话给

fix(a1);

将此数组的引用准确地分配给此a3方法中的参数fix。由于此方法返回此引用(return a3;),行

long[] a2 = fix(a1);

将为变量a2分配相同的引用。所以在所有点上,所有变量和参数都引用相同的数组。

fix方法正在修改该数组。因此,您所拥有的所有别名都可以看到

答案 2 :(得分:0)

a1[]的引用作为参数传递给fix(),这就是为什么基本上

致电a1[] == a2[]

fix()

a2[]指向a1[],但a1[]总和现在为15,因此a2[]总和也是15。