/**
* 主方法定义了两个Integer变量,通过调用swap方法后,使这两个变量交换数据
*/
public class swapImpl {
public static void main(String[] args) throws Exception {
Integer a = 1;
Integer b = 2;
System.err.println(a + "---" + b);
swap(a, b);
System.err.println(a + "---" + b);
}
public static void swap(Integer num1, Integer num2) throws Exception {
Field field = num1.getClass().getDeclaredField("value");//获取类的value
field.setAccessible(true);//修改访问权限
Object tmp = field.get(num1);//获取指针所指向的对象的值,而不是获取引用值
field.set(num1, num2);//将num1的引用所指向的a的值设置为,num2所指向的b的值
field.set(num2, tmp);//将tmp的值设置给,num2所指向的b的值
}
}
num1.getClass拿到参数对应的类
在通过getDeclaredField("value")拿到该类的value属性
field.get(num1)获取这个值的引用所指向的对象的具体的值,也就是num1指向的a的值1
field.set是将num1的值设置为num2的值
然后再讲tmp的值设置为num1的值
这样就实现了值的互换