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

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

    }
}

猜你喜欢

转载自www.linuxidc.com/Linux/2018-05/152318.htm