前路迢迢 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 />}