常见面试题系列 :
public static void main(String[] args) throws Exception {
Integer a = 1, b = 2;//装箱
System.out.println("交换前---a:" + a + ",b:" + b);
//此处交换a和b的值
swap(a, b);
System.out.println("交换后---a:" + a + ",b:" + b);
}
具体实现方法:
static void swap(Integer i1, Integer i2) throws Exception {
//异想天开的实现
//Integer temp = i1;
//i1=i2;
//i2=temp;
//一: 反射实现 由于int值范围为(-128至127),此区间的值是比较常用的。会默认初始化好内存地址并放入缓存中。
//Integer temp = i1; 这样写是把i1的内存地址赋给了temp
Integer temp = new Integer(i1);//把temp的地址和i1的地址隔离开,这样i1的内存交换成i2的内存地址时不会再改变temp的内存地址。
Field file = Integer.class.getDeclaredField("value");
file.setAccessible(true);
file.set(i1, i2); //这里交换后,i2的内存地址交换给了i1,则 Integer temp = i1; 这样写的后果是,temp的内存地址也变成的i2的内存地址。
file.set(i2, temp);
}