我在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中是如何工作的吗?
提前致谢
答案 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的任何引用都将观察到这些更改。