这样的交换是不会起作用的.
因为t1,t2在Swap(t1,t2)中被拷贝了一份,指向同样的两个对象,在Swap内部是交换了,外部是不行的.
用下面的试试
public Object[] swap(Object t1, Object t2) {
return new Object[]{t2,t1};
}
因为t1,t2在Swap(t1,t2)中被拷贝了一份,指向同样的两个对象,在Swap内部是交换了,外部是不行的.
用下面的试试
public Object[] swap(Object t1, Object t2) {
return new Object[]{t2,t1};
}
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);
}
}
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的指向并未改变
但是对于对象,传进函数的对象是可以被函数改变的
下面是个例子:
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;};
};