【发布时间】:2010-10-04 16:00:18
【问题描述】:
在以下示例中,我在理解 Java 的“按值传递”操作时遇到了问题:
public class Numbers {
static int[] s_ccc = {7};
static int[] t_ccc = {7};
public static void calculate(int[] b, int[] c) {
System.out.println("s_ccc[0] = " + s_ccc[0]); // 7
System.out.println("t_ccc[0] = " + t_ccc[0]); // 7
b[0] = b[0] + 9;
System.out.println("\nb[0] = " + b[0]); // 16
c = b;
System.out.println("c[0] = " + c[0] + "\n"); // 16
}
public static void main(String[] args) {
calculate(s_ccc, t_ccc);
System.out.println("s_ccc[0] = " + s_ccc[0]); // 16
System.out.println("t_ccc[0] = " + t_ccc[0]); // 7
}
}
我知道因为 s_ccc 是一个引用变量,所以当我将它提供给方法 calculate() 并在方法中对其元素进行一些更改时,即使在我离开该方法后更改仍然存在。我认为 t_ccc 也应该如此。又是 一个引用变量,我把它交给方法calculate(),在方法中我把t_ccc的引用改为s_ccc的引用。现在 t_ccc 应该是一个指向数组的引用变量,该数组有一个 int 类型的元素等于 16。但是当方法 calculate() 离开时,似乎 t_ccc 指向它的旧对象。为什么会这样?改变不应该也保留吗?毕竟是引用变量。
问候
【问题讨论】:
-
您的意思是calculate(s_ccc, t_ccc) 而不是calculate(s_ccc, s_ccc)?
-
是的,完全正确!我的意思是计算(s_ccc,t_ccc)。对不起。
-
@gemm:你能修改一下你的帖子吗?
标签: java reference pass-by-value