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一样

    }
}

 

posted @ 2018-05-10 09:51  炫舞风中  阅读(248)  评论(0编辑  收藏  举报