Java实现引用交换
前提
- Java自身机制,导致函数参数的传递其实无论是基本类型还是引用类型,实质都是值传递,无法直接通过函数临时交换达到引用交换的目的
- 虽然无法直接实参数指向交换,但是可以通过其他方法实现
实现
- 第一种方法是直接交换,即不通过函数传参数交换,直接用类似
string temp = null;
string temp = s1;
s1 = s2;
s2 = temp;
- 通过反射实现
public static void exchange(String s1,String s2){
try {
Object temp;
Field fv = String.class.getDeclaredField ( "value" );
Field fh = String.class.getDeclaredField ( "hash" );
fv.setAccessible ( true );
fh.setAccessible ( true );
//交换
temp = fv.get (s1);
fv.set(s1, fv.get(s2));
fv.set(s2, temp);
fh.setInt(s1, 0);
fh.setInt(s2, 0);
} catch (Exception e) {
e.printStackTrace ();
}
}