赞
踩
private static void swap(Integer num1,Integer num2){
Integer tmp = num1;
num1 = num2;
num2 = tmp;
}
private static void swap(Integer num1,Integer num2){
// Integer tmp = num1;
// num1 = num2;
// num2 = tmp;
try {
Field field = Integer.class.getDeclaredField("value");
field.setAccessible(true);
int tmp = num1;//拆箱
field.set(num1,num2);
field.set(num2,tmp);
} catch (Exception e) {
e.printStackTrace();
}
}
是什么原因导致的呢?打开Integer的源码如下:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
private static void swap(Integer num1,Integer num2){
// Integer tmp = num1;
// num1 = num2;
// num2 = tmp;
try {
Field field = Integer.class.getDeclaredField("value");
field.setAccessible(true);
int tmp = num1;//拆箱
field.set(num1,num2);
field.set(num2,new Integer(tmp));
} catch (Exception e) {
e.printStackTrace();
}
}
方法二、直接将值作为一个int类型,不进行拆装箱操作即field.setInt(num2,tmp);
private static void swap(Integer num1,Integer num2){
// Integer tmp = num1;
// num1 = num2;
// num2 = tmp;
try {
Field field = Integer.class.getDeclaredField("value");
field.setAccessible(true);
int tmp = num1;//拆箱
field.set(num1,num2);
field.setInt(num2,tmp);
} catch (Exception e) {
e.printStackTrace();
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。