这样的交换是不会起作用的.
因为t1,t2在Swap(t1,t2)中被拷贝了一份,指向同样的两个对象,在Swap内部是交换了,外部是不行的.
用下面的试试
  public Object[] swap(Object t1, Object t2) {
     return new Object[]{t2,t1};
  }

解决方案 »

  1.   

    class SO {
       public static Object[] swap(Object t1, Object t2) {
          return new Object[]{t2,t1};
       }   public static void swap1(StringBuffer b1, StringBuffer b2) {
          String tmp = b1.toString();
          b1.replace(0,b1.length(),b2.toString());
          b2.replace(0,b2.length(),tmp);
       }   public static void main(String[] args) {
          String s0 = "abc";
          String s1 = "def";
          System.out.println(s0+","+s1);
          Object[] t = swap(s0,s1);
          s0 = (String)t[0];
          s1 = (String)t[1];
          System.out.println(s0+","+s1);      StringBuffer sb0 = new StringBuffer("abc");
          StringBuffer sb1 = new StringBuffer("def");
          System.out.println(sb0+","+sb1);
          swap1(sb0,sb1);
          System.out.println(sb0+","+sb1);
      }
    }
      

  2.   

    程序中a,b,t1,t2都是句柄;
    t1指向t1_object
    t2指向t2_objecct
    调用Swap( testObject a,testObject b)时:
    程序生长了两个句柄:a指向t1_object,b指向t2_object;
    完成Swap( testObject a,testObject b)后:
    a指向t2_object,b指向t1_object;而句柄t1,t2的指向并未改变
      

  3.   

    java里没有传址的概念
    但是对于对象,传进函数的对象是可以被函数改变的
    下面是个例子:
    public class test{
    public static void main(String[] args) 
    {
    System.out.println("Hello World!");
    change a=new change(5);
    change b=new change(6);

    System.out.println(a.get());
    System.out.println(b.get());
    swap(a,b);
    System.out.println(a.get());
    System.out.println(b.get());
    }
    private static void swap(change a,change b){
    change c=new change(0);
    c.set(a.get());
    a.set(b.get());
    b.set(c.get());
    }}
    class change
    {
    private int val;
    public change(int i){val=i;};
    public int get(){return val;}
    public void set(int i){val=i;};
    };