java使用反射实现swap 值互换

/**
 * 主方法定义了两个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的值

这样就实现了值的互换

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的狮子Li

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值