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

前路迢迢 2018-05-10

  在一次面试中,做了这么一道题"交换两个整型变量的值",当时看到这个题目之后,会心一笑,这也太简单了--直接使用中间变量交换不就可以了吗?但是,面试官却说不需要返回值,<br />在调用的地方,再次输出变量的值,我就不知道了,于是,他提示我用反射。思考了良久,就写了下面的代码。<br />package com.yzh.study.fanshe;<br /><br />import java.lang.reflect.Field;<br /><br />/**<br /> * author:yangzhou<br /> * time: 2018/5/9 15:55<br /> * description: 通过反射交换两个变量的值<br /> **/<br />public class Swap {<br />    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {<br />        Integer a = 2;<br />        Integer b=4;<br />        System.out.println("a="+a+","+"b="+b);//a=2,b=4<br />        swap(a,b);<br />        System.out.println("a="+a+","+"b="+b);//a=4,b=2<br />    }<br /><br />    /**<br />     * 开始交换,只能使用integer类型<br />     * @param a<br />     * @param b<br />     * @throws NoSuchFieldException<br />     * @throws IllegalAccessException<br />     */<br />    private static  void swap(Integer a,Integer b) throws NoSuchFieldException, IllegalAccessException {<br />        int temp = a;//暂存a的值,否者后面讲造成a,b的值相同<br />        Class<Integer> integerClass = Integer.class;<br />        Field value = integerClass.getDeclaredField("value");<br />        value.setAccessible(true);<br />        value.setInt(a,b);<br />        value.setInt(b,temp);//经过测试,不能使用value.set(b,temp),否者,b的值也将变成和a一样<br /><br />    }<br />}

相关推荐

松鼠的窝 / 0评论 2018-02-13