简单的swap(integer i1.,integer i2),原本以为就是简单的对象之间的交换,代码如下
static void sw2(Integer i1, Integer i2){
Integer tmp = i1;
i1 = i2;
i2 = tmp;
}
你会发现交换没有成功。真正的做法应该是访问integer的value属性,改变其值。
注意点
- 引用传递和值传递
- 反射
- Integer本身的理解
改良之后
static void sw(Integer i1, Integer i2) throws Exception {
Field field = Integer.class.getDeclaredField("value");
field.setAccessible(true);
Integer tmp = new Integer(i1.intValue());
field.set(i1,i2);
field.set(i2,tmp);
}
这样就交换成功了。