public static void reverseArray(int[] arr) {
int[] reversed = new int[arr.length];
for (int i = arr.length - 1; i > -1; --i) {
reversed[arr.length - i - 1] = arr[i];
}
arr = reversed;
}
这里我有一个反向数组方法。如果我打电话
int[] v = new int[] {1, 2, 3, 4};
reverseArray(v);
//print v
我会得到“1 2 3 4”
但是如果我将reverseArray函数更改为
public static void reverseArray(int[] arr) {
int[] reversed = new int[arr.length];
for (int i = arr.length - 1; i > -1; --i) {
reversed[arr.length - i - 1] = arr[i];
}
for (int i = 0; i < arr.length; ++i) {
arr[i] = reversed[i];
}
}
它将按预期工作并打印出“4 3 2 1”为什么没有“arr =逆转”;工作?它们都是指针,所以如果我将一个指定给另一个,它应该指向与2D数组相同的对象。如果我做
int[][] mat = //some assignment
public void reverseMatrix() {
reverseAllRows();
int[][] c = new int[mat.length][mat[0].length];
for (int i = 0; i < mat.length; ++i) {
c[mat.length - 1 - i] = mat[i];
}
mat = c; //This works for some reason
}
它不需要我复制每个元素就可以工作。为什么这样,我怎么知道何时使用equals以及何时不使用?
答案 0 :(得分:1)
您需要做的是返回数组:
public static int[] reverseArray(int[] arr)
{
int[] reversed = new int[arr.length];
for (int i = arr.length - 1; i > -1; --i)
{
reversed[arr.length - i - 1] = arr[i];
}
return reversed;
}
然后你将调用函数:
int[] v = new int[] {1, 2, 3, 4};
v = reverseArray(v);
//print v
答案 1 :(得分:0)
Java是一种Pass-By-Value语言。这就是原因。传递引用并将该引用分配给其他对象时,调用方的原始引用不会更改。因此,调用者无法看到变化。