public static void swapEqual(int[] a,int[] b){
int[] temp=new int[b.length];
temp=b;
b=a;
a=temp;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] c={1,2};
int[] d={3,4};
swapEqual(c,d);
System.out.println(c[1]);
}
为什么打印出来的C[1]还是原来的2啊,为什么没有交换。数组的=不就是复制引用吗?通过函数可以把a,b的引用交换,这样不就是把内容交换了吗?
干嘛非要这样写?
public static void swap(int[] a,int[] b){
int[] temp=new int[b.length];
for(int i=0;i
这样子我试了一下,就可以达到交换的目的了
好困惑啊,求解!!
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
swapEqual(int[] a,int[] b)中:
一开始:
a --> {1,2}(地址1)
b --> {3,4}(地址2)
经过你的代码处理(a,b指向的地址交换了):
b --> {1,2}(地址1)
a --> {3,4}(地址2)
但是不会对c,d造成影响,c,d依旧是:
c --> {1,2}(地址1)
d --> {3,4}(地址2)
//=================================
swap(int[] a,int[] b)中:
一开始:
a --> {1,2}(地址1)
b --> {3,4}(地址2)
经过你的代码处理(地址1,2中的值交换了):
a --> {3,4}(地址1)
b --> {1,2}(地址2)
虽然不会对c,d指向的地址造成影响,但是原本地址下的值已经改变了:
c --> {3,4}(地址1)
d --> {1,2}(地址2)
//=======================================
我的理解是这样,写完发现与@lianera的表述是同一个意思,就当是补充说明了。
//=======================================
你可以尝试用return把swapEqual(int[] a,int[] b)中交换后的a,b的值赋给c,d,看看结果。
swapEqual函数里面,只是改变了形参a、b的引用,并没有改变实参c、d的引用。
而swap里面,改变的c、d对应的区域的值了。
补充一下,Java里面数组也是对象,所以a、b、c、d都是引用。
Java 里的引用和 C++ 里的引用概念有点不一样,Java 里的引用相当于 C++ 中的指针,所以你直接对形参赋值是改变不了实参的。
谢谢大家的回答,都讲的挺好的。我也明白了