Java反射交换两个整型变量的值

  在一次面试中,做了这么一道题"交换两个整型变量的值",当时看到这个题目之后,会心一笑,这也太简单了--直接使用中间变量交换不就可以了吗?但是,面试官却说不需要返回值,
在调用的地方,再次输出变量的值,我就不知道了,于是,他提示我用反射。思考了良久,就写了下面的代码。
package com.yzh.study.fanshe;

import java.lang.reflect.Field;

/**
 * author:yangzhou
 * time: 2018/5/9 15:55
 * description: 通过反射交换两个变量的值
 **/
public class Swap {
    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
        Integer a = 2;
        Integer b=4;
        System.out.println("a="+a+","+"b="+b);//a=2,b=4
        swap(a,b);
        System.out.println("a="+a+","+"b="+b);//a=4,b=2
    }

    /**
     * 开始交换,只能使用integer类型
     * @param a
     * @param b
     * @throws NoSuchFieldException
     * @throws IllegalAccessException
     */
    private static  void swap(Integer a,Integer b) throws NoSuchFieldException, IllegalAccessException {
        int temp = a;//暂存a的值,否者后面将造成a,b的值相同
        Class<Integer> integerClass = Integer.class;
        Field value = integerClass.getDeclaredField("value");
        value.setAccessible(true);
        value.setInt(a,b);
        value.setInt(b,temp);//经过测试,不能使用value.set(b,temp),否者,b的值也将变成和a一样

    }
}

 

转载于:https://www.cnblogs.com/cq-yangzhou/p/9018106.html

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值