//交换2个数据
public static void main(String[] args) throws Exception {
// Integer a=1;
// Integer b=2;
Integer a=new Integer(1);
Integer b=new Integer(2);
System.out.println(a+"---"+b);
swap(a, b);
System.out.println(a+"---"+b);
}
/**
* 这里虽然是引用传递类型,但是Integer内部并没有提供改变内部值的方法,所以可以使用反射
* @param a
* @param b
* getDeclaredFields():获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段
* @throws Exception
*/
private static void swap(Integer a, Integer b) throws Exception{
int tem=a.intValue();
Field field=Integer.class.getDeclaredField("value");
field.setAccessible(true);
//field.set也一样
field.setInt(a, b);
field.setInt(b, tem);
//field.set 这种方式会因为自动拆装箱和缓存导致结果有问题
// field.set(a, b);
// field.set(b, tem);
}