函数参数传递在 Java 中的工作原理



我在geeksForGeeks上看到了这个堆排序程序:https://www.geeksforgeeks.org/heap-sort/

在 main method(( 中,他们采用了一个 int[] 并将其传递给 sort((。然后他们将相同的 int[] 传递给实用程序函数 printArray(( 进行打印,并且它打印排序后的数组。我尝试了相同的方法来交换 2 个变量,但它不起作用.

public void swap(int a,int b){
int t=a;
a=b;
b=t;
}
public static void printVal(int a,int b){
System.out.println("New value n a: "+a+", b: "+b);
}
public static void main(String[] args) {
    ArrayEx ae= new ArrayEx();
    int a=5;
    int b=10;
    System.out.println("Old value n a: "+a+", b: "+b);
    ae.swap(a, b);
    printVal(a,b);
}

任何人都可以告诉参数传递和处理在 Java 中是如何工作的吗?

提前致谢

交换

问题中的观察结果是,使用 int[],您可以交换值,并使对同一对象的任何引用保留更改,而交换int则不会。

public void swap(int a,int b) {
    int holder = a;
    a = b;
    b = holder;
}
public void swap(int[] arr, int a, int b) {
    int holder = arr[a];
    arr[a] = arr[b];
    arr[b] = holder;
}

引用int[]的变量引用内存中的对象,因此修改对象本身将导致对相同对象的任何引用保留更改。但是,在带有int的示例中,您将更改引用的值。这将导致变量引用另一个基元值,其中唯一的更改是该特定的基元变量。您没有更改任何值,只是引用另一个值。

简而言之,当您在内存中物理更改对象时,对对象所做的修改将被保留,并且对该对象的任何引用都将观察更改。

相关内容

最新更新