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