可能重复:
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是按值传递的...
可能重复:
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是按值传递的...
是的,Java 是按值传递的。但是,这里通过值传递的是对数组的引用,而不是数组本身。
Java 中的对象是通过引用值传递的。所以如果你传入一个对象,它会得到一个引用的副本(如果你将该引用分配给别的东西,只修改参数,原始对象仍然存在并被主程序引用)。
public void badSwap(Integer var1, Integer var2)
{
Integer temp = var1;
var1 = var2;
var2 = temp;
}
这些是对对象的引用,但它们不会被交换,因为它们只是函数范围内的内部引用。但是,如果您这样做:
var1.doubleValue();
它将使用对原始对象的引用。
Arrays.sort
不修改变量,它修改变量指向的数组对象。
没错,Java 总是按值传递,对于对象,对象的引用是按值传递的。因此,您的数组的引用是按值传递的。
对数组的引用是按值传递的,因此该sort
方法有自己的引用,它仍然引用与a
引用相同的数组。这意味着可以更改引用sort
的同一数组的内容。a