怎么输出还是2,3?public class TestClass {
public static void main(String[] args)
{
Test a = new Test(); 
Integer i = new Integer(2),j= new Integer(3); 

a.swap(i,j);
System.out.println(i);
System.out.println(j);
}

}class Test
{
  public void swap(Integer a , Integer b)
  {
  Integer c = a ; 
  a = b ; 
  b = c;    
  }
}

解决方案 »

  1.   

    你对java的方法参数的传递不理解,java中不像c++那样,传递对象的引用,参数全是传值的拷贝,如果是对象,那么是这个对象地址的拷贝,你所进行的交换只是在拷贝间进行的交换,对原始对象没有影响。你如果在方法里输出参数的值,会发现值已经改变了。
      

  2.   

    我也一直在考虑这个问题,如果要在JAVA中实现这种功能怎么办呢?难道就没有用方法实现的可能吗?
      

  3.   

    怎么? 我是说 fxbird(昨天晚上我可能死了) 说的对
      

  4.   

    to  nlcold:
     确实没有办法,但可以改变对象里的值,这才是最重要的。在方法里改
      

  5.   

    只能改变对象的内容,而Integer是不可变对象,可以自己对int包装成一个可变对象或者存是为了实现,可以用反射class Test
    {
    public void swap(Integer a , Integer b)
    {
    try
    {
    Field field = Integer.class.getDeclaredField("value");

    field.setAccessible(true);

    int aValue = field.getInt(a);
    int bValue = field.getInt(b);

    field.setInt(a, bValue);
    field.setInt(b, aValue); }
    catch (Exception e)
    {
    e.printStackTrace();
    }
    }
    }
    不过这没有什么意义了就
      

  6.   

    public class Test{
    static int x;
    static int y;
    static void swap(Test a){
    int temp=0;
    temp=a.x;
    a.x=a.y;
    a.y=temp;
    }
    public static void main(String[] args){
    Test a =new Test();
    x=4;
    y=5;
    swap(a);
    System.out.println(x);
    System.out.println(y);
    }
      

  7.   

    首先Integer类型是一个基本数据类型的包装器,这种类型的实例创建后是不可变的,所以你的这个方法永远不可能成功;
    其次,即使你传入的两个参数不是Integer类型,你直接赋值也是错误的思路。
      

  8.   

    Integer是不可变对象
    =========
    学了一招  呵呵
      

  9.   

    还没揭贴啊,算拉, 我也来说两句.
    在java用对象传的是引用,也就是值的地址,函数swap(Integer a , Integer b)中的交换实际是交换它们的地址,但是由于这地址是值传递的,所以函数退出后,地址不变.下面c代码,你能够看懂的话,就明白了.void swap(int *a,int *b)
    {
    int *c = a; a = b ; b = c;
    }