函数参数传递如何在java中工作[复制]

问题描述 投票:2回答:1

这个问题在这里已有答案:

我在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中工作?

提前致谢

java pass-by-reference pass-by-value
1个回答
0
投票

Swapping

问题中的观察结果是,使用int[],您可以交换值并对相同的Object保留更改,同时交换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的任何引用都将观察到这些更改。

© www.soinside.com 2019 - 2024. All rights reserved.