public class Test1 {
public static void sort(int[] a){
for (int i = 0; i < a.length; i++) {
a[i] += 1;
if(i>0) swap(a,i);
}
}
public static void swap(int[] a ,int x) {
a[x] = a[x-1];
}
public static void main(String[] args) {
int[] a = {1,2,3};
sort(a);
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
}
打印的结果为2 2 2
我现在不理解的是sort方法中的数组a 为什么会因为swap 中的数组a改变而改变,
一:因为 数组a是引用型变量,在传递过程中是值(hash值?)传递;两个a都指向同一个对象
二:因为在main方法中 数组a的作用域是整个main方法。
求指点;
------解决思路----------------------
第四行 a[i] += 1;
sort中
i=0 223
i=1 233 swap后 223
i=2 224 swap后 222
sort是排序,swap是交换,不知道你用了这样的名字,代码却不知在做什么
数组排序有现成的方法 Arrays.sort
------解决思路----------------------
sort方法调用swap方法时,swap方法的形参a指向的是main方法中的数组a,在被调函数中修改数组a,主调函数中的数组a,会发生相应变化,因为他们操作的都是同一块内存地址。
------解决思路----------------------
数组创建的时候就分配了内存地址,你以后操作只要不new或者=都是操作的同一块内存地址.
------解决思路----------------------
你可以理解main方法调用sort方法可以改变数组的值,
而sort方法调用swap方法,这是一样的。这是内存中数组的地址传递,他们都在调用处在同一个地址中的对象