因为基本数据类型是值传递的,所以如果值互换会导致获得一样的值,这时需要使用反射来进行解决问题。
public class SwapDemo { public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException { Integer a = 1, b = 2; System.out.println("before:a = " + a + " b=" + b);//预期:a = 1, b = 2 //a和b值互换 swap(a,b); System.out.println("after:a=" + a + " b=" + b);//预期:a = 2, b = 1 } public static void swap(Integer i1, Integer i2) throws NoSuchFieldException, IllegalAccessException { //通过反射原理来进行值的改变 //因为Integer内部是一个final 的 int 基本数据类型,所以这是值传递,不能改变 Field field = Integer.class.getDeclaredField("value"); field.setAccessible(true); Integer temp = new Integer(i1.intValue());//这一步很关键,这是需要改变原来i1的地址值,否则temp会因为下一步变为2 field.set(i1,i2.intValue()); field.set(i2,temp); }