【发布时间】:2015-03-19 20:24:48
【问题描述】:
下面的代码打印出 15 15,但我希望它打印出 12 15。似乎修复方法正在更新 a1,使其包含 3,7,5 而不是 3,4,5。有人知道为什么会这样吗?
class PassA
{
public static void main(String [] args)
{
PassA p = new PassA();
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;
}
}
【问题讨论】:
-
你会发生什么?最后 a2 和 a1 指向同一个数组,您已将其修改为以 7 作为中间元素。
-
只要您没有在
fix方法中执行数组的深拷贝,a1和a2都引用了值为{3,4,5}的数组。 -
fix() 获取对数组的引用作为参数。这意味着它会更改原始数组的值。 fix() 更改第二个单元格的值(请记住,数组索引从 0 开始)使其成为 {3,7,5}
标签: java arrays oop operators assignment-operator