日期:2014-05-20 浏览次数:20830 次
public class Swap { public static void main(String[] args) { //SwapTest st=SwapTest(2,3); 不能这样写,因为2,3为基本数据类型int型的,而非对象Integer型 Integer a=new Integer(2); Integer b=new Integer(3); SwapTest st=new SwapTest(a,b); System.out.println("before swap:"); st.outPut(); st.dataSwap(a,b); System.out.println("after swap:"); st.outPut(); } } class SwapTest { Integer a=null; Integer b=null; public SwapTest(Integer a,Integer b) { this.a=a; this.b=b; } protected void dataSwap(Integer a,Integer b) { Integer temp=a; a=b; b=temp; } protected void outPut() { System.out.println("a="+a+" b="+b); } }
//每天都有这样的帖子... protected void dataSwap(Integer a,Integer b)//拷贝2个引用a,b { // 总结来说,你传进来之后,开始是拷贝的和被拷贝的指向同一个对象,但是你在下面把这个拷贝的引用指向了另一个,这时候它跟被拷贝的引用之间没什么关系了,你爱改怎么改就怎么改! Integer temp=a;//和temp都指向同一个对象 a=b;//把a指向b指向的对象,现在指向同一个对象 b=temp;//... }
------解决方案--------------------
protected void dataSwap(Integer a,Integer b)
{
Integer temp=a;
a=b;
b=temp;
}
你交换的是dataSwap函数里的参数a,b,而你的outPut输出的是SwapTest的属性a,b
这样改:
protected void dataSwap()
{
Integer temp=this.a;
this.a=this.b;
this.b=temp;
}