在写到交换两个Integer时候出现了这种问题
@Test
public void testSwap() {
Integer a = 1;
Integer b = 2;
System.out.println("交换前a="+a+",b="+b);
swap(a,b);
System.out.println("交换后a="+a+",b="+b);
}
public void swap(Integer a,Integer b) {
Integer temp = a;
a = b;
b = temp;
}
最后得到结果为
交换前a=1,b=2
交换后a=1,b=2
了解JAVA值传递的都知道会产生这样的结果,那么怎么才能实现其中的数值交换呢。
public void swap(Integer a1,Integer b1) throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
Field value = Integer.class.getDeclaredField("value");
value.setAccessible(true);
int temp = a1.intValue();
value.set(a1,b1.intValue());
value.set(b1,new Integer(temp));
}
第一步利用反射机制得到Field对象,修改其中的private final属性需要是指权限为true,
利用反射的set方法设置不同的值,实现交换的效果
最后的结果为:
交换前a=1,b=2
交换后a=2,b=1