函数参数传递如何在java中工作

时间:2017-12-30 03:01:15

标签: java pass-by-reference pass-by-value

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

在main方法()中,他们采用了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中是如何工作的吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

交换来实现

问题中的观察结果是,使用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[]的变量引用内存中的Object,因此修改Object本身将导致对相同Object的任何引用保留更改。 但是,在int的示例中,您正在更改要引用的值。这将导致变量引用另一个原始值,其中唯一的变化是该特定的原始变量。您没有更改任何值,只是引用另一个值。

简单地说,当您在物理上更改内存中的Object时,将保留对Object的修改,并且对该Object的任何引用都将观察到这些更改。