小弟现在想交换两个数,本以为会应该很简单的,这下可麻烦了,于是小弟写了个测试类.
代码如下: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);

}问下,上面的程序出错在哪里,......我知道值传递是实现不了的,只能用引用传递,我上面的程序不是引用传递吗?...好像是啊..

解决方案 »

  1.   


    //每天都有这样的帖子...protected void dataSwap(Integer a,Integer b)//拷贝2个引用a,b
        {
    // 总结来说,你传进来之后,开始是拷贝的和被拷贝的指向同一个对象,但是你在下面把这个拷贝的引用指向了另一个,这时候它跟被拷贝的引用之间没什么关系了,你爱改怎么改就怎么改!
            Integer temp=a;//和temp都指向同一个对象
            a=b;//把a指向b指向的对象,现在指向同一个对象
            b=temp;//...
        }
      

  2.   

    看来还是要靠自己解决啊....我的问题已经解决:解决办法,我把Swap函数重新写了一下.把传递的引用调换下就ok了~! protected void dataSwap(Integer m,Integer n)
    {
    this.a=n;
    this.b=m;
    }
      

  3.   

    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;
        }
      

  4.   


    那也不行的,你的意思不就是把我的main函数里的a,b改下就行了吗,..不信你改成c,d..测试下,是也不可以的~!
      

  5.   

    4楼正确...!
    最喜欢你的回答....分 give you~!
      

  6.   

    我说这个方法!
    protected void dataSwap(Integer a,Integer b)//这里a和b,你的成员变量也是a,b!还不明白?
        {
            Integer temp=a;
            a=b;
            b=temp;
        }
      

  7.   

    public class Test2 { public static void main(String[] args) {
    int a = 100;
    int b = 200;
    System.out.println("a = " + a + ", b = " + b);
    SwapTest st = new SwapTest();
    st.dataSwap(a, b);
    st.print();
    }
    }class SwapTest {
    private int a;
    private int b; public void dataSwap(int a, int b) {
    this.a = b;
    this.b = a;
    } public void print() {
    System.out.println("a = " + a + ", b = " + b);
    }
    }