当前位置: 代码迷 >> J2EE >> 关于java基础变量传递有关问题
  详细解决方案

关于java基础变量传递有关问题

热度:51   发布时间:2016-04-17 23:25:37.0
关于java基础变量传递问题
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方法,这是一样的。这是内存中数组的地址传递,他们都在调用处在同一个地址中的对象
  相关解决方案