7

可能重复:
Java 是按引用传递吗?

我在这里有点困惑。Arrays.sort(a) 如何修改a的值?

int[] a = {9,8,7,6,5,4,3,2,1};
Arrays.sort(a);
System.out.println(Arrays.toString(a));

我以为java是按值传递的...

4

6 回答 6

11

是的,Java 是按值传递的。但是,这里通过值传递的是对数组的引用,而不是数组本身。

于 2012-05-25T15:09:43.887 回答
6

Java 中的对象是通过引用值传递的。所以如果你传入一个对象,它会得到一个引用的副本(如果你将该引用分配给别的东西,只修改参数,原始对象仍然存在并被主程序引用)。

此链接演示了有关按引用值传递的一些内容

public void badSwap(Integer var1, Integer var2)
{
  Integer temp = var1;
  var1 = var2;
  var2 = temp;
}

这些是对对象的引用,但它们不会被交换,因为它们只是函数范围内的内部引用。但是,如果您这样做:

var1.doubleValue();

它将使用对原始对象的引用。

于 2012-05-25T15:10:02.277 回答
5

Arrays.sort不修改变量,它修改变量指向的数组对象。

于 2012-05-25T15:10:21.530 回答
2

没错,Java 总是按值传递,对于对象,对象的引用是按值传递的。因此,您的数组的引用是按值传递的。

于 2012-05-25T15:10:21.077 回答
1
  1. 它对其进行排序。
  2. 对数组的引用是按值传递的。不是数组本身。
于 2012-05-25T15:10:43.400 回答
0

对数组的引用是按值传递的,因此该sort方法有自己的引用,它仍然引用与a引用相同的数组。这意味着可以更改引用sort的同一数组的内容。a

于 2012-05-25T15:12:02.247 回答